diff --git a/pymolfile/molfile/_libpymolfile.so b/pymolfile/molfile/_libpymolfile.so index 5f16657f992bcb5f73c8572738446d8880bc9afd..afa3e0a62a50fd7b2efa0c76eae1d2fedf08d253 100755 Binary files a/pymolfile/molfile/_libpymolfile.so and b/pymolfile/molfile/_libpymolfile.so differ diff --git a/pymolfile/molfile/compile.sh b/pymolfile/molfile/compile.sh index 0a16c41abea2454bf10bf092248037ae54376688..f25b34aa0c231d999945e434aee1d9029f22b487 100644 --- a/pymolfile/molfile/compile.sh +++ b/pymolfile/molfile/compile.sh @@ -1,2 +1,2 @@ -swig -Wall -c++ -python libpymolfile.i +swig -py3 -Wall -c++ -python libpymolfile.i g++ -fPIC -Wall -Wextra -Wunused-function -shared -I/labEnv3/lib/python3.6/site-packages/numpy/core/include/ -I. libpymolfile_wrap.cxx pymolfile.c -o _libpymolfile.so -Ivmd_molfile_plugins/include/ -Ilib/ -L. lib/libmolfile_plugin.a -I/labEnv3/include/python3.6m/ -L/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib -lpython3.6 diff --git a/pymolfile/molfile/deneme b/pymolfile/molfile/deneme new file mode 100644 index 0000000000000000000000000000000000000000..e7bac927c5897296286dd2ac56496fa484729015 --- /dev/null +++ b/pymolfile/molfile/deneme @@ -0,0 +1,17546 @@ +126 +0 ('*|*_GEO|*_DEN|*_WFK|*_POT|*_VHA|*_VHXC|*_VXC', 'ABINIT', 1, 0, 0, 1, 1, 0, 0, 1, 'ABINIT', 'mol file reader', 'Rob Lahaye', 0, 4, 17, 1) +1 ('fld', 'fld', 0, 0, 0, 0, 0, 0, 0, 0, 'AVS Field', 'mol file reader', 'Eamon Caddigan', 0, 5, 17, 0) +2 ('alc', 'Alchemy', 1, 0, 0, 1, 0, 0, 0, 0, 'Alchemy', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +3 ('prep', 'AMBERPREP', 1, 0, 0, 1, 0, 0, 0, 0, 'AMBERPREP', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +4 ('bs', 'BallStick', 1, 0, 0, 1, 0, 0, 0, 0, 'BallStick', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +5 ('bgf', 'MSIBGF', 1, 0, 0, 1, 0, 0, 0, 0, 'MSIBGF', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +6 ('car', 'BiosymCAR', 1, 0, 0, 1, 0, 0, 0, 0, 'BiosymCAR', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +7 ('boog', 'Boogie', 1, 0, 0, 1, 0, 0, 0, 0, 'Boogie', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +8 ('caccrt', 'Cacao', 1, 0, 0, 1, 0, 0, 0, 0, 'Cacao', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +9 ('cadpac', 'CADPAC', 1, 0, 0, 1, 0, 0, 0, 0, 'CADPAC', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +10 ('charmm', 'CHARMm', 1, 0, 0, 1, 0, 0, 0, 0, 'CHARMm', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +11 ('c3d1', 'Chem3d-1', 1, 0, 0, 1, 0, 0, 0, 0, 'Chem3d-1', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +12 ('c3d2', 'Chem3d-2', 1, 0, 0, 1, 0, 0, 0, 0, 'Chem3d-2', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +13 ('cssr', 'CSSR', 1, 0, 0, 1, 0, 0, 0, 0, 'CSSR', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +14 ('fdat', 'FDAT', 1, 0, 0, 1, 0, 0, 0, 0, 'FDAT', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +15 ('gstat', 'GSTAT', 1, 0, 0, 1, 0, 0, 0, 0, 'GSTAT', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +16 ('dock', 'Dock', 1, 0, 0, 1, 0, 0, 0, 0, 'Dock', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +17 ('dpdb', 'DockPDB', 1, 0, 0, 1, 0, 0, 0, 0, 'DockPDB', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +18 ('feat', 'Feature', 1, 0, 0, 1, 0, 0, 0, 0, 'Feature', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +19 ('fract', 'Fractional', 1, 0, 0, 1, 0, 0, 0, 0, 'Fractional', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +20 ('gamout', 'GAMESSoutput', 1, 0, 0, 1, 0, 0, 0, 0, 'GAMESSoutput', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +21 ('gzmat', 'GaussianZmatrix', 1, 0, 0, 1, 0, 0, 0, 0, 'GaussianZmatrix', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +22 ('gauout', 'Gaussian92output', 1, 0, 0, 1, 0, 0, 0, 0, 'Gaussian92output', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +23 ('g94', 'Gaussian94output', 1, 0, 0, 1, 0, 0, 0, 0, 'Gaussian94output', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +24 ('gr96A', 'Gromos96A', 1, 0, 0, 1, 0, 0, 0, 0, 'Gromos96A', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +25 ('gr96N', 'Gromos96N', 1, 0, 0, 1, 0, 0, 0, 0, 'Gromos96N', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +26 ('hin', 'HyperchemHIN', 1, 0, 0, 1, 0, 0, 0, 0, 'HyperchemHIN', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +27 ('sdf', 'IsisSDF', 1, 0, 0, 1, 0, 0, 0, 0, 'IsisSDF', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +28 ('m3d', 'M3D', 1, 0, 0, 1, 0, 0, 0, 0, 'M3D', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +29 ('macmol', 'MacMolecule', 1, 0, 0, 1, 0, 0, 0, 0, 'MacMolecule', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +30 ('macmod', 'Macromodel', 1, 0, 0, 1, 0, 0, 0, 0, 'Macromodel', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +31 ('micro', 'MicroWorld', 1, 0, 0, 1, 0, 0, 0, 0, 'MicroWorld', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +32 ('mm2in', 'MM2Input', 1, 0, 0, 1, 0, 0, 0, 0, 'MM2Input', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +33 ('mm2out', 'MM2Output', 1, 0, 0, 1, 0, 0, 0, 0, 'MM2Output', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +34 ('mm3', 'MM3', 1, 0, 0, 1, 0, 0, 0, 0, 'MM3', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +35 ('mmads', 'MMADS', 1, 0, 0, 1, 0, 0, 0, 0, 'MMADS', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +36 ('mdl', 'MDLMOL', 1, 0, 0, 1, 0, 0, 0, 0, 'MDLMOL', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +37 ('molen', 'MOLIN', 1, 0, 0, 1, 0, 0, 0, 0, 'MOLIN', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +38 ('mopcrt', 'MopacCartesian', 1, 0, 0, 1, 0, 0, 0, 0, 'MopacCartesian', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +39 ('mopint', 'MopacInternal', 1, 0, 0, 1, 0, 0, 0, 0, 'MopacInternal', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +40 ('mopout', 'MopacOutput', 1, 0, 0, 1, 0, 0, 0, 0, 'MopacOutput', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +41 ('pcmod', 'PCModel', 1, 0, 0, 1, 0, 0, 0, 0, 'PCModel', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +42 ('psin', 'PSGVBin', 1, 0, 0, 1, 0, 0, 0, 0, 'PSGVBin', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +43 ('psout', 'PSGVBout', 1, 0, 0, 1, 0, 0, 0, 0, 'PSGVBout', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +44 ('msf', 'QuantaMSF', 1, 0, 0, 1, 0, 0, 0, 0, 'QuantaMSF', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +45 ('schakal', 'Schakal', 1, 0, 0, 1, 0, 0, 0, 0, 'Schakal', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +46 ('shelx', 'ShelX', 1, 0, 0, 1, 0, 0, 0, 0, 'ShelX', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +47 ('smiles', 'SMILES', 1, 0, 0, 1, 0, 0, 0, 0, 'SMILES', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +48 ('spar', 'Spartan', 1, 0, 0, 1, 0, 0, 0, 0, 'Spartan', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +49 ('semi', 'SpartanSE', 1, 0, 0, 1, 0, 0, 0, 0, 'SpartanSE', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +50 ('spmm', 'SpartanMM', 1, 0, 0, 1, 0, 0, 0, 0, 'SpartanMM', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +51 ('mol', 'SybylMol', 1, 0, 0, 1, 0, 0, 0, 0, 'SybylMol', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +52 ('mol2', 'SybylMol2', 1, 0, 0, 1, 0, 0, 0, 0, 'SybylMol2', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +53 ('wiz', 'Conjure', 1, 0, 0, 1, 0, 0, 0, 0, 'Conjure', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +54 ('unixyz', 'UniChemXYZ', 1, 0, 0, 1, 0, 0, 0, 0, 'UniChemXYZ', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +55 ('xyz', 'XYZ', 1, 0, 0, 1, 0, 0, 0, 0, 'XYZ', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +56 ('xed', 'XED', 1, 0, 0, 1, 0, 0, 0, 0, 'XED', 'mol file converter', 'Justin Gullingsrud, John Stone', 1, 13, 17, 0) +57 ('basis', 'basisset', 0, 0, 0, 0, 0, 0, 0, 0, 'Basis Set', 'mol file reader', 'Jan Saam', 0, 1, 17, 0) +58 ('bgf', 'bgf', 1, 1, 0, 1, 1, 1, 0, 1, 'MSI Biograf Format', 'mol file reader', 'Peter Freddolino ', 0, 16, 17, 1) +59 ('binpos', 'binpos', 0, 0, 0, 1, 0, 0, 0, 1, 'Scripps Binpos', 'mol file reader', 'Brian Bennion', 0, 4, 17, 1) +60 ('bmcg', 'biomocca', 0, 0, 0, 0, 0, 0, 0, 0, 'Biomocca Volumetric Map', 'mol file reader', 'John Stone', 0, 2, 17, 1) +61 ('brix,brx', 'brix', 0, 0, 0, 0, 0, 0, 0, 0, 'BRIX Density Map', 'mol file reader', 'Eamon Caddigan', 0, 8, 17, 1) +62 ('car', 'car', 1, 0, 0, 1, 0, 0, 0, 0, 'InsightII car', 'mol file reader', 'Eamon Caddigan', 0, 5, 17, 1) +63 ('ccp4,mrc,map', 'ccp4', 0, 0, 0, 0, 0, 0, 0, 0, 'CCP4, MRC Density Map', 'mol file reader', 'Eamon Caddigan, Brendan McMorrow, John Stone', 1, 7, 17, 1) +64 ('cor', 'cor', 1, 0, 0, 1, 0, 0, 0, 0, 'CHARMM Coordinates', 'mol file reader', 'Eamon Caddigan, John Stone', 0, 9, 17, 1) +65 ('cpmd', 'cpmd', 0, 0, 0, 1, 0, 0, 0, 0, 'CPMD', 'mol file reader', 'Axel Kohlmeyer, John Stone', 0, 4, 17, 1) +66 ('mdcrd,crd', 'crd', 0, 0, 0, 1, 0, 0, 0, 1, 'AMBER Coordinates', 'mol file reader', 'Justin Gullingsrud, John Stone', 0, 9, 17, 1) +67 ('mdcrd,crd', 'crdbox', 0, 0, 0, 1, 0, 0, 0, 1, 'AMBER Coordinates with Periodic Box', 'mol file reader', 'Justin Gullingsrud, John Stone', 0, 9, 17, 1) +68 ('cub,cube', 'cube', 1, 0, 0, 1, 0, 0, 0, 0, 'Gaussian Cube', 'mol file reader', 'Axel Kohlmeyer, John Stone', 1, 2, 17, 1) +69 ('dcd', 'dcd', 0, 0, 0, 1, 0, 0, 0, 1, 'CHARMM,NAMD,XPLOR DCD Trajectory', 'mol file reader', 'Axel Kohlmeyer, Justin Gullingsrud, John Stone', 1, 12, 17, 1) +70 ('dlpolyhist', 'dlpolyhist', 1, 0, 0, 1, 0, 0, 0, 0, 'DL_POLY_C HISTORY', 'mol file reader', 'John Stone', 0, 8, 17, 1) +71 ('dlpolyhist', 'dlpoly3hist', 1, 0, 0, 1, 0, 0, 0, 0, 'DL_POLY_4 HISTORY', 'mol file reader', 'John Stone', 0, 8, 17, 1) +72 ('dlpolyconfig', 'dlpolyconfig', 1, 0, 0, 1, 0, 0, 0, 0, 'DL_POLY CONFIG', 'mol file reader', 'Alin M Elena', 0, 1, 17, 1) +73 ('ds6,dsn6,omap', 'DSN6', 0, 0, 0, 0, 0, 0, 0, 0, 'DSN6', 'mol file reader', 'Eamon Caddigan', 0, 6, 17, 1) +74 ('dx', 'dx', 0, 0, 0, 0, 0, 0, 0, 0, 'DX', 'mol file reader', 'Eamon Caddigan, Justin Gullingsrud, John Stone, Leonardo Trabuco', 2, 0, 17, 0) +75 ('cns,edm,xplor', 'edm', 0, 0, 0, 0, 0, 0, 0, 0, 'XPLOR Electron Density Map', 'mol file reader', 'John Stone, Leonardo Trabuco', 0, 9, 17, 1) +76 ('fs,fs4', 'fs', 0, 0, 0, 0, 0, 0, 0, 0, 'FS4 Density Map', 'mol file reader', 'Eamon Caddigan', 0, 6, 17, 1) +77 ('log', 'gamess', 1, 0, 0, 0, 0, 0, 0, 0, 'GAMESS', 'mol file reader', 'Jan Saam, Markus Dittrich, Johan Strumpfer', 1, 2, 17, 0) +78 ('srf,SRF,grasp', 'grasp', 0, 0, 0, 0, 0, 0, 0, 0, 'GRASP', 'mol file reader', 'Justin Gullingsrud, John Stone', 0, 8, 17, 1) +79 ('phi,grd', 'grd', 0, 0, 0, 0, 0, 0, 0, 0, 'GRASP,Delphi Binary Potential Map', 'mol file reader', 'Eamon Caddigan', 0, 6, 17, 1) +80 ('grid', 'grid', 0, 0, 0, 0, 0, 0, 0, 0, 'GRID,UHBD Binary Potential Map', 'mol file reader', 'Eamon Caddigan', 0, 3, 17, 1) +81 ('gro', 'gro', 1, 0, 0, 1, 1, 0, 0, 1, 'Gromacs GRO', 'mol file reader', 'David Norris, Justin Gullingsrud, Magnus Lundborg', 1, 2, 17, 0) +82 ('g96', 'g96', 1, 0, 0, 1, 0, 0, 0, 0, 'Gromacs g96', 'mol file reader', 'David Norris, Justin Gullingsrud', 1, 2, 17, 0) +83 ('trr', 'trr', 0, 0, 0, 1, 0, 0, 0, 1, 'Gromacs TRR Trajectory', 'mol file reader', 'David Norris, Justin Gullingsrud, Axel Kohlmeyer', 1, 2, 17, 0) +84 ('trj', 'trj', 0, 0, 0, 1, 0, 0, 0, 0, 'Gromacs TRJ Trajectory', 'mol file reader', 'David Norris, Justin Gullingsrud', 1, 2, 17, 0) +85 ('xtc', 'xtc', 0, 0, 0, 1, 0, 0, 0, 0, 'Gromacs XTC Compressed Trajectory', 'mol file reader', 'David Norris, Justin Gullingsrud', 1, 2, 17, 0) +86 ('js', 'js', 1, 1, 1, 1, 1, 1, 1, 1, 'js', 'mol file reader', 'John Stone', 2, 15, 17, 1) +87 ('lammpstrj', 'lammpstrj', 1, 0, 0, 1, 1, 0, 0, 1, 'LAMMPS Trajectory', 'mol file reader', 'Marco Kalweit, Axel Kohlmeyer, Lutz Maibaum, John Stone', 0, 22, 17, 0) +88 ('map', 'map', 0, 0, 0, 0, 0, 0, 0, 0, 'Autodock Grid Map', 'mol file reader', 'Eamon Caddigan', 0, 6, 17, 1) +89 ('mdf', 'mdf', 1, 1, 0, 0, 0, 0, 0, 0, 'InsightII MDF', 'mol file reader', 'Eamon Caddigan, Axel Kohlmeyer', 0, 6, 17, 1) +90 ('mol2', 'mol2', 1, 1, 0, 1, 1, 1, 0, 1, 'MDL mol2', 'mol file reader', 'Peter Freddolino, Eamon Caddigan', 0, 17, 17, 1) +91 ('molden', 'molden', 1, 0, 0, 0, 0, 0, 0, 0, 'Molden', 'mol file reader', 'Markus Dittrich, Jan Saam, Alexey Titov', 0, 10, 17, 1) +92 ('mesh', 'pmesh', 0, 0, 0, 0, 0, 0, 0, 0, 'polygon mesh', 'mol file reader', 'Brian Bennion', 1, 0, 17, 1) +93 ('face,vert', 'msms', 0, 0, 0, 0, 0, 0, 0, 0, 'MSMS Surface Mesh', 'mol file reader', 'John Stone', 0, 5, 17, 1) +94 ('coor', 'namdbin', 0, 0, 0, 1, 0, 0, 0, 1, 'NAMD Binary Coordinates', 'mol file reader', 'James Phillips, Justin Gullingsrud', 0, 2, 17, 1) +95 ('off', 'off', 0, 0, 0, 0, 0, 0, 0, 0, 'Object File Format (OFF)', 'mol file reader', 'Francois-Xavier Coudert', 0, 4, 17, 1) +96 ('prmtop,parm7', 'parm7', 1, 1, 0, 0, 0, 0, 0, 0, 'AMBER7 Parm', 'mol file reader', 'Brian Bennion, Justin Gullingsrud, John Stone', 0, 15, 17, 0) +97 ('parm', 'parm', 1, 1, 0, 0, 0, 0, 0, 0, 'AMBER Parm', 'mol file reader', 'Justin Gullingsrud, John Stone', 4, 4, 17, 1) +98 ('pbeq, phi80', 'pbeq', 0, 0, 0, 0, 0, 0, 0, 0, 'CHARMM PBEQ Binary Potential Map', 'mol file reader', 'John Stone', 0, 4, 17, 1) +99 ('pdb,ent', 'pdb', 1, 1, 0, 1, 1, 0, 0, 1, 'PDB', 'mol file reader', 'Justin Gullingsrud, John Stone', 1, 16, 17, 1) +100 ('cif', 'pdbx', 1, 1, 0, 1, 1, 0, 0, 1, 'mmCIF/PDBX', 'mol file reader', 'Brendan McMorrow', 0, 9, 17, 1) +101 ('big', 'delphibig', 0, 0, 0, 0, 0, 0, 0, 0, "Delphi 'Big' Formatted Potential Map", 'mol file reader', 'Eamon Caddigan', 0, 7, 17, 1) +102 ('plt', 'plt', 0, 0, 0, 0, 0, 0, 0, 0, 'gOpenmol plt', 'mol file reader', 'Eamon Caddigan', 0, 4, 17, 1) +103 ('ply', 'ply', 0, 0, 0, 0, 0, 0, 0, 0, 'PLY', 'mol file reader', 'John Stone', 0, 2, 17, 1) +104 ('pqr', 'pqr', 1, 0, 0, 1, 1, 0, 0, 1, 'PQR', 'mol file reader', 'Eamon Caddigan', 0, 6, 17, 1) +105 ('psf', 'psf', 1, 1, 1, 0, 1, 1, 1, 0, 'CHARMM,NAMD,XPLOR PSF', 'mol file reader', 'Justin Gullingsrud, John Stone', 1, 9, 17, 1) +106 ('r3d', 'raster3d', 0, 0, 0, 0, 0, 0, 0, 0, 'Raster3d Scene File', 'mol file reader', 'Justin Gullingsrud', 0, 3, 17, 1) +107 ('rst7', 'rst7', 0, 0, 0, 1, 0, 0, 0, 1, 'AMBER7 Restart', 'mol file reader', 'Brian Bennion, Axel Kohlmeyer', 0, 4, 17, 0) +108 ('sit,situs', 'situs', 0, 0, 0, 0, 0, 0, 0, 0, 'Situs Density Map', 'mol file reader', 'John Stone, Leonardo Trabuco', 1, 5, 17, 1) +109 ('spi,spider', 'spider', 0, 0, 0, 0, 0, 0, 0, 0, 'SPIDER Density Map', 'mol file reader', 'John Stone', 0, 7, 17, 1) +110 ('stl', 'stl', 0, 0, 0, 0, 0, 0, 0, 0, 'STL Stereolithography Triangle Mesh', 'mol file reader', 'Eamon Caddigan', 3, 0, 17, 1) +111 ('arc', 'tinker', 1, 0, 0, 1, 0, 0, 0, 0, 'Tinker', 'mol file reader', 'John Stone', 0, 5, 17, 1) +112 ('uhbdgrd,grd', 'uhbd', 0, 0, 0, 0, 0, 0, 0, 0, 'UHBD Grid', 'mol file reader', 'Alexander Spaar, Justin Gullingsrud', 0, 5, 17, 1) +113 ('CHGCAR', 'CHGCAR', 0, 0, 0, 0, 0, 0, 0, 0, 'VASP_CHGCAR', 'mol file reader', 'Sung Sakong', 0, 7, 17, 0) +114 ('OUTCAR', 'OUTCAR', 1, 0, 0, 1, 0, 0, 0, 0, 'VASP_OUTCAR', 'mol file reader', 'Sung Sakong', 0, 7, 17, 0) +115 ('PARCHG', 'PARCHG', 0, 0, 0, 0, 0, 0, 0, 0, 'VASP_PARCHG', 'mol file reader', 'Sung Sakong', 0, 7, 17, 0) +116 ('POSCAR', 'POSCAR', 1, 0, 0, 1, 1, 0, 0, 1, 'VASP_POSCAR', 'mol file reader', 'Sung Sakong', 0, 7, 17, 0) +117 ('VASP_XDATCAR5', 'VASP_XDATCAR5', 1, 0, 0, 1, 0, 0, 0, 0, 'VASP_XDATCAR5', 'mol file reader', 'Sung Sakong', 0, 7, 17, 0) +118 ('XDATCAR', 'XDATCAR', 1, 0, 0, 1, 0, 0, 0, 0, 'VASP_XDATCAR', 'mol file reader', 'Sung Sakong', 0, 7, 17, 0) +119 ('xml', 'xml', 1, 0, 0, 1, 0, 0, 0, 0, 'VASP_xml', 'mol file reader', 'Sung Sakong', 0, 7, 17, 0) +120 ('vtk', 'vtk', 0, 0, 0, 0, 0, 0, 0, 0, 'VTK grid reader', 'mol file reader', 'John Stone', 0, 2, 17, 0) +121 ('xbgf', 'xbgf', 1, 1, 0, 1, 1, 1, 0, 1, 'Internal Paratool Format', 'mol file reader', 'Peter Freddolino ', 0, 13, 17, 1) +122 ('axsf,xsf', 'xsf', 1, 0, 0, 1, 0, 0, 0, 0, '(Animated) XCrySDen Structure File', 'mol file reader', 'Axel Kohlmeyer, John Stone', 0, 10, 17, 1) +123 ('xyz,xmol', 'xyz', 1, 0, 0, 1, 1, 0, 0, 1, 'XYZ', 'mol file reader', 'Mauricio Carrillo Tripp, John E. Stone, Axel Kohlmeyer', 1, 3, 17, 1) +124 ('dtr,dtr/,stk,atr,atr/', 'dtr', 0, 0, 0, 1, 0, 0, 0, 1, 'DESRES Trajectory', 'mol file reader', 'D.E. Shaw Research', 4, 1, 17, 0) +125 ('mae,maeff,cms', 'mae', 1, 1, 0, 1, 1, 1, 0, 1, 'Maestro File', 'mol file reader', 'D. E. Shaw Research', 3, 8, 17, 0) +<Swig Object of type 'molfile_plugin_t *' at 0x10c2e13c0> +This passed +<molobject object at 0x10d30df08> +This passed too +17411 +Here +[b'N' b'' b'' ..., b'' b'' b''] +<class 'numpy.ndarray'> +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'2' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'2' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'2' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'2' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'2' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'2' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'1' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'1' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'1' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'1' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'I' +b'L' +b'E' +b'' +b'' +b'' +b'' +b'' +b'\\' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'E' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'E' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'E' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'E' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'E' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'E' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'Z' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'Z' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'Z' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'Z' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'Z' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'Z' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'Z' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'Z' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b']' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'U' +b'' +b'' +b'' +b'' +b'' +b'^' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'U' +b'' +b'' +b'' +b'' +b'' +b'^' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'U' +b'' +b'' +b'' +b'' +b'' +b'^' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'U' +b'' +b'' +b'' +b'' +b'' +b'^' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'U' +b'' +b'' +b'' +b'' +b'' +b'^' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'U' +b'' +b'' +b'' +b'' +b'' +b'^' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'U' +b'' +b'' +b'' +b'' +b'' +b'^' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'U' +b'' +b'' +b'' +b'' +b'' +b'^' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'U' +b'' +b'' +b'' +b'' +b'' +b'^' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'U' +b'' +b'' +b'' +b'' +b'' +b'^' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'U' +b'' +b'' +b'' +b'' +b'' +b'^' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'E' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'E' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'U' +b'' +b'' +b'' +b'' +b'' +b'^' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'E' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'E' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'U' +b'' +b'' +b'' +b'' +b'' +b'^' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'U' +b'' +b'' +b'' +b'' +b'' +b'^' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'U' +b'' +b'' +b'' +b'' +b'' +b'^' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'N' +b'' +b'' +b'' +b'' +b'' +b'_' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'N' +b'' +b'' +b'' +b'' +b'' +b'_' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'N' +b'' +b'' +b'' +b'' +b'' +b'_' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'N' +b'' +b'' +b'' +b'' +b'' +b'_' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'N' +b'' +b'' +b'' +b'' +b'' +b'_' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'N' +b'' +b'' +b'' +b'' +b'' +b'_' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'N' +b'' +b'' +b'' +b'' +b'' +b'_' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'N' +b'' +b'' +b'' +b'' +b'' +b'_' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'N' +b'' +b'' +b'' +b'' +b'' +b'_' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'N' +b'' +b'' +b'' +b'' +b'' +b'_' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'N' +b'' +b'' +b'' +b'' +b'' +b'_' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'N' +b'' +b'' +b'' +b'' +b'' +b'_' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'N' +b'' +b'' +b'' +b'' +b'' +b'_' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'N' +b'' +b'' +b'' +b'' +b'' +b'_' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'`' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'E' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'E' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'E' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'E' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'E' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'E' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'Z' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'Z' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'Z' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'Z' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'Z' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'Z' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'Z' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'Z' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'a' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'P' +b'' +b'' +b'' +b'' +b'' +b'b' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'P' +b'' +b'' +b'' +b'' +b'' +b'b' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'P' +b'' +b'' +b'' +b'' +b'' +b'b' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'P' +b'' +b'' +b'' +b'' +b'' +b'b' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'P' +b'' +b'' +b'' +b'' +b'' +b'b' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'P' +b'' +b'' +b'' +b'' +b'' +b'b' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'P' +b'' +b'' +b'' +b'' +b'' +b'b' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'P' +b'' +b'' +b'' +b'' +b'' +b'b' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'P' +b'' +b'' +b'' +b'' +b'' +b'b' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'P' +b'' +b'' +b'' +b'' +b'' +b'b' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'P' +b'' +b'' +b'' +b'' +b'' +b'b' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'A' +b'S' +b'P' +b'' +b'' +b'' +b'' +b'' +b'b' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'c' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'c' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'c' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'c' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'c' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'c' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'c' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'c' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'c' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'c' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'Y' +b'S' +b'' +b'' +b'' +b'' +b'' +b'c' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'Y' +b'' +b'' +b'' +b'' +b'' +b'd' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'Y' +b'' +b'' +b'' +b'' +b'' +b'd' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'Y' +b'' +b'' +b'' +b'' +b'' +b'd' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'Y' +b'' +b'' +b'' +b'' +b'' +b'd' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'Y' +b'' +b'' +b'' +b'' +b'' +b'd' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'Y' +b'' +b'' +b'' +b'' +b'' +b'd' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'G' +b'L' +b'Y' +b'' +b'' +b'' +b'' +b'' +b'd' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'3' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'L' +b'E' +b'U' +b'' +b'' +b'' +b'' +b'' +b'e' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'N' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'A' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'B' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'B' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'G' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'E' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'E' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'E' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'E' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'Z' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'Z' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'Z' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'Z' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'E' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'E' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'E' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'E' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'D' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'C' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'C' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'C' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'C' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'C' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'P' +b'H' +b'E' +b'' +b'' +b'' +b'' +b'' +b'f' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'g' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'g' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'g' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'h' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'h' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'h' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'i' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'i' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'i' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'j' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'j' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'j' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'k' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'k' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'k' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'l' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'l' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'l' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'm' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'm' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'm' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'n' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'1' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'n' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'H' +b'W' +b'2' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'S' +b'O' +b'L' +b'' +b'' +b'' +b'' +b'' +b'n' +b'\x01' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'' +b'O' +b'W' +b'' +b'' +b'' +b'' +b'' diff --git a/pymolfile/molfile/libpymolfile.i b/pymolfile/molfile/libpymolfile.i index e858607bcd8dcac49060aa144ac6cc507cb44e2e..b5027679e0b522b8f8a74398d4db4172ff9c30da 100644 --- a/pymolfile/molfile/libpymolfile.i +++ b/pymolfile/molfile/libpymolfile.i @@ -24,10 +24,12 @@ Published under BSD LICENSE */ #define SWIG_FILE_WITH_INIT +#define __STDC_FORMAT_MACROS #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> +#include <inttypes.h> #include "molfile_plugin.h" #include "libmolfile_plugin.h" #include "vmdplugin.h" @@ -37,6 +39,7 @@ %include "numpy.i" %init %{ +Py_Initialize(); import_array(); %} @@ -54,6 +57,57 @@ import_array(); enum { pluginOK, pluginNOINIT, pluginCLOSE, pluginNOMEM, pluginENDOFFILE, pluginFILENOTFOUND, pluginFORMATERROR }; + +/* Definition of molfile_atoms_t from molfile_plugin.h */ +%inline %{ + +/* +struct MolAtoms { + char name[16]; + char type[16]; + char resname[8]; + int resid; + char segid[8]; + char chain[2]; + char altloc[2]; + char insertion[2]; + float occupancy; + float bfactor; + float mass; + float charge; + float radius; + float atomicnumber; + float ctnumber; +}; + +void del_plugin_structure(PyObject* pymolfile_atoms){ + delete (MolAtoms*)PyCapsule_GetPointer(pymolfile_atoms, "plugin_structure"); +} + +static PyObject* alloc_plugin_structure(PyObject *self, PyObject *args) { + return PyCapsule_New((void*)new MolAtoms(), "plugin_structure", del_plugin_structure); +} +*/ +void del_plugin(PyObject* pymolfile_plugin){ + delete (MolObject*)PyCapsule_GetPointer(pymolfile_plugin, "plugin"); +} + +void del_atoms(PyObject* pymolfile_atoms){ + delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atoms"); +} + +void del_atomname(PyObject* pymolfile_atoms){ + delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atomname"); +} + + +static PyObject* alloc_plugin(PyObject *self, PyObject *args) { + return PyCapsule_New((void*)new MolObject(), "plugin_handle", del_plugin); +} + +%} + + /* pymolfile.c initialize and finalize molfile plugins */ @@ -126,20 +180,290 @@ PyObject * molfile_plugin_info(molfile_plugin_t** plugin_list, int plugin_no) { } %} + +%feature("autodoc", "0") my_open_file_read; +%rename (open_file_read) my_open_file_read; +%exception my_open_file_read { + $action + if (PyErr_Occurred()) SWIG_fail; +} +%inline %{ +PyObject * my_open_file_read(molfile_plugin_t* plugin, char* fname, char* ftype, int natoms) { + if (PyType_Ready(&MolObjectType) < 0) + return NULL; + PyTypeObject *type = &MolObjectType; + /*plugin_handle = PyCapsule_New((void*)new MolObject(), "plugin", del_plugin); */ + /*MolObject* plugin_c = new MolObject;*/ + MolObject *plugin_c; + plugin_c = (MolObject *)type->tp_alloc(type, 0); + /*PyObject * plugin_c = MolObject_new(&MolObjectType, args, kwds);*/ + plugin_c->plugin = plugin; + plugin_c->file_handle = plugin->open_file_read(fname, ftype, &natoms); + plugin_c->natoms = natoms; + /* PyCapsule_SetPointer(plugin_handle, &plugin_c); */ + /* PyObject* plugin_handle = PyCapsule_New((void*)plugin_c, "plugin", del_plugin); */ + PyObject* plugin_handle = (PyObject *)plugin_c; + /*if(!plugin_handle) printf("Not assigned\n");*/ + /*PyObject *tuple = PyTuple_New(2); + PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong((long)natoms)); + PyTuple_SET_ITEM(tuple, 1, plugin_handle);*/ + return plugin_handle; + } +%} + +/* +%typemap( argout ) ( char **MolfileAtomT_CharArray ) +{ + // The result variable is the return value from + // c_ephcom_read_constants, the number of actual values that are + // defined for cnames/values. + npy_intp dims[] = { result }; + PyArray_Dims newshape_location; + PyArray_Dims * newshape = &newshape_location; + PyObject * status_check; + newshape->len = 1; + newshape->ptr = dims; + + // resize array$argnum to actual size needed. + // Follow directions at http://www.mail-archive.com/numpy-discussion@scipy.org/msg13013.html + status_check = PyArray_Resize( (PyArrayObject *) array$argnum, newshape, 0, NPY_CORDER ); + if ( !status_check ) + SWIG_fail; + Py_DECREF( status_check ); + $result = SWIG_Python_AppendOutput( $result, array$argnum ); +} +%typemap( freearg ) ( char **MolfileAtomT_CharArray ) +{ + free( $1 ); +} +*/ + /* -%feature("autodoc", "0") molfile_open; -%exception molfile_open { +#define DIM 3 +typedef int imatrix[DIM][DIM]; +typedef int ivec[DIM]; +typedef float fmatrix[DIM][DIM]; +typedef float fvec[DIM]; +*/ + +/* Reading from xdr files */ +/* +%apply (float INPLACE_ARRAY2[ANY][ANY]) {(matrix box)} +%apply (int DIM1, int DIM2, float* INPLACE_ARRAY2) {(int natoms, int _DIM, float *x), + (int vnatoms, int v_DIM, float *v), + (int fnatoms, int f_DIM, float *f)} +*/ +/* +%apply (int INPLACE_IARRAY2[ANY][ANY]) {(imatrix intdata)} +%apply (float INPLACE_FARRAY2[ANY][ANY]) {(fmatrix floatdata)} +%apply (int DIM1, int* INPLACE_IARRAY2) {(int rnatoms, int* MolAtom_resid)} +%apply (int DIM1, float* INPLACE_FARRAY2) {(int mnatoms, float* MolAtom_mass), + (int anatoms, float* MolAtom_atomicnumber)} +*/ +/* +%inline %{ +int structure_read(molfile_plugin_t* plugin, void* fhandle, int *options, + int* natoms, char** MolAtom_name, + int* natoms, char** MolAtom_type, + int* natoms, char** MolAtom_resname, + int* natoms, int** MolAtom_resid, + int* natoms, char** MolAtom_segid, + int* natoms, char** MolAtom_chain, + int* natoms, char** MolAtom_altloc, + int* natoms, char** MolAtom_insertion, + int* natoms, float** MolAtom_occupancy, + int* natoms, float** MolAtom_bfactor, + int* natoms, float** MolAtom_mass, + int* natoms, float** MolAtom_charge, + int* natoms, float** MolAtom_radius, + int* natoms, float** MolAtom_atomicnumber, + int* natoms, float** MolAtom_ctnumber) { + molfile_atom_t* atoms; + atoms = (molfile_atom_t *)calloc(natoms,sizeof(molfile_atom_t)); + plugin->read_structure(fhandle, options, atoms); + MolAtom_name = (char **)malloc(natoms,sizeof(char*)); + MolAtom_type = (char **)malloc(natoms,sizeof(char*)); + MolAtom_resname = (char **)malloc(natoms,sizeof(char*)); + MolAtom_resid = (int **)malloc(natoms,sizeof(int*)); +%} +*/ +/* +%inline %{ +int structure_read(molfile_plugin_t* plugin, void* fhandle, int *options, + int natoms, char** MolAtom_name, + int tnatoms, char** MolAtom_type, + int rnatoms, int* MolAtom_resid, + int mnatoms, float* MolAtom_mass, + int anatoms, float* MolAtom_atomicnumber) { + int i; + molfile_atom_t* atoms; + molfile_atom_t atm; + atoms = (molfile_atom_t *)calloc(natoms,sizeof(molfile_atom_t)); + plugin->read_structure(fhandle, options, atoms); + if(atoms == NULL) { free(atoms); return 1; } + if(atoms->type == NULL || atoms->name == NULL){ free(atoms); return 1; } + MolAtom_name = (char **)malloc(natoms,sizeof(char*)); + MolAtom_type = (char **)malloc(natoms,sizeof(char*)); + MolAtom_resid = (int *)malloc(natoms,sizeof(int)); + MolAtom_mass = (float *)malloc(natoms,sizeof(float)); + MolAtom_atomicnumber = (float *)malloc(natoms,sizeof(float)); + for (i=0;i<natoms;i++){ + atm = atoms[i]; + MolAtom_name[i] = atm.name; + MolAtom_type[i] = atm.type; + MolAtom_resid[i] = atm.resid; + MolAtom_mass[i] = atm.mass; + MolAtom_atomicnumber[i] = atm.atomicnumber; + } + return 0; + } +%} +*/ + +%feature("autodoc", "0") my_read_structure; +%rename (read_structure) my_read_structure; +extern PyObject * my_read_structure(PyObject* molpack); + +/* +%feature("autodoc", "0") my_read_structure; +%rename (read_structure) my_read_structure; +%exception my_read_structure { $action if (PyErr_Occurred()) SWIG_fail; } %inline %{ -PyObject * molfile_open(molfile_plugin_t* plugin, ) { - int *plugno = &plugin_no; - return plugin; +PyObject * my_read_structure(PyObject* molpack) { + int options = 0; + int i; + molfile_plugin_t* plugin; + void* file_handle; + molfile_atom_t* atoms; + int numatoms, status; + char** atom_names; + char** atom_types; + PyObject *npatoms = NULL; */ + /*MolObject* plugin_handle = (MolObject*)PyCapsule_GetPointer(molpack, "plugin");*/ +/* MolObject* plugin_handle = (MolObject*)molpack; + plugin = plugin_handle->plugin; + file_handle = plugin_handle->file_handle; + numatoms = plugin_handle->natoms; + atoms = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t)); + printf("Test1\n"); + status = plugin->read_structure(file_handle, &options, atoms); + printf("Test2 %d\n",status); + if (status!=0){ + PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into Python."); + return NULL; + } + printf("Test3\n"); + npy_intp natoms[1] = { numatoms }; + + PyArrayObject* oresid; + int64_t* cresid; + + int typenum; + int nd = 1; + npy_intp dims[1] = { numatoms }; */ + /*dims[0] = numatoms;*/ +/* oresid = (PyArrayObject*) PyArray_SimpleNew(nd, dims, NPY_INT64); + npy_intp* n = PyArray_DIMS(oresid); + printf("dimensions %ld\n", n[0]); + cresid = (int64_t*) PyArray_DATA(oresid); + + PyObject* npatomresid = NULL; + char** MolAtom_name = (char **)malloc(numatoms*sizeof(char*)); + char** MolAtom_type = (char **)malloc(numatoms*sizeof(char*)); + int64_t* MolAtom_resid = NULL; */ + /*int64_t* MolAtom_resid = (int64_t *)malloc(numatoms*sizeof(int64_t));*/ +/* float* MolAtom_mass = (float *)malloc(numatoms*sizeof(float)); + float* MolAtom_atomicnumber = (float *)malloc(numatoms*sizeof(float)); + for (i=0;i<numatoms;i++){ + MolAtom_name[i] = atoms[i].name; + MolAtom_type[i] = atoms[i].type; + cresid[i] = (int64_t) atoms[i].resid; + MolAtom_mass[i] = atoms[i].mass; + MolAtom_atomicnumber[i] = atoms[i].atomicnumber; + } */ + /*Py_DECREF( obj );*/ + /*npy_intp dims[3];*/ /* PyArray_AsCArray is for ndim <= 3 */ +/* PyArray_Descr *descr; + npatoms = PyArray_SimpleNewFromData(1, natoms, NPY_USERDEF, atoms); + printf("Test4 numatoms=%d\n", numatoms); + PyObject* npatomname = NULL; + npatomname = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, MolAtom_name[0]); + PyObject* npatomtype = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, MolAtom_type); */ + /*PyObject* npatomresname = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->resname);*/ + /*PyObject* npatomsegid = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->segid);*/ + /*PyObject* npatomchain = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->chain);*/ + /*PyObject* npatomaltloc = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->altloc);*/ + /*PyObject* npatominsert = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->insertion);*/ + /*PyObject* npatomoccup = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->occupancy);*/ + /*PyObject* npatombfact = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->bfactor);*/ +/* PyObject* npatommass = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, MolAtom_mass); */ + /*PyObject* npatomcharge = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->charge);*/ + /*PyObject* npatomradius = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->radius);*/ +/* PyObject* npatomicnumber = PyArray_SimpleNewFromData(1, natoms, NPY_INT64, MolAtom_atomicnumber); */ + /*if (npatomname==NULL || npatomtype==NULL || npatomresname==NULL || + npatomresid==NULL || npatomsegid==NULL || npatomchain==NULL ) + { + free(atoms); + Py_XDECREF(npatomname); Py_XDECREF(npatomtype); + Py_XDECREF(npatomresname); Py_XDECREF(npatomresid); Py_XDECREF(npatomsegid); + Py_XDECREF(npatomchain); Py_XDECREF(npatomaltloc); Py_XDECREF(npatominsert); + Py_XDECREF(npatomoccup); Py_XDECREF(npatombfact); Py_XDECREF(npatommass); + Py_XDECREF(npatomcharge); Py_XDECREF(npatomradius); Py_XDECREF(npatomicnumber); + PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into Python."); + return 0; + } + PyArray_BASE(npatomname) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomtype) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomresname) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomresid) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomsegid) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomchain) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomaltloc) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatominsert) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomoccup) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatombfact) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatommass) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomcharge) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomradius) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomicnumber) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatoms) = PyCObject_FromVoidPtr(atoms, free); + PyArray_BASE((PyArrayObject *)npatoms) = PyCapsule_New(atoms, "atoms", del_atoms);*/ + /*PyArray_BASE((PyArrayObject *)npatoms); */ +/* printf("Test4-2\n"); */ + /*PyObject* Py_MolAtom_name = PyCapsule_New((void*)MolAtom_name, "atomname", del_atomname);*/ + /*PyObject* Py_MolAtom_name; + Py_INCREF(Py_MolAtom_name);*/ +/* printf("Test4-3\n"); */ + /*PyArray_SetBaseObject((PyArrayObject *)npatomname, Py_MolAtom_name);*/ + /*PyArray_SetBaseObject((PyArrayObject *)npatomtype, MolAtom_type); + PyArray_SetBaseObject((PyArrayObject *)npatomresid, MolAtom_resid); + PyArray_SetBaseObject((PyArrayObject *)npatommass, MolAtom_mass); + PyArray_SetBaseObject((PyArrayObject *)npatomicnumber, MolAtom_atomicnumber); */ +/* printf("Test5\n"); + PyObject *tuple = PyTuple_New(2); + PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong((long)natoms)); + printf("Test6\n"); + PyTuple_SET_ITEM(tuple, 1, npatomname); */ + /*PyTuple_SET_ITEM(tuple, 2, npatomtype); + PyTuple_SET_ITEM(tuple, 3, npatomresid); + PyTuple_SET_ITEM(tuple, 4, npatommass); + PyTuple_SET_ITEM(tuple, 5, npatomicnumber); + PyObject* vars = PyDict_New(); + printf("Test7\n"); + PyDict_SetItemString( vars, "name", npatomname ); */ +/* printf("Test8\n"); */ + /*PyDict_SetItemString( vars, "resid", npatomresid ); */ + /*return Py_BuildValue("O", oresid); */ + /*return PyArray_FromArray(oresid, PyArray_DESCR(oresid), 0);*/ +/* return 0; } %} */ + /* python wrappers for functions and structure data in molfile_plugin.h @@ -167,7 +491,20 @@ PyObject * molfile_open(molfile_plugin_t* plugin, ) { /* molfile_plugin_t */ - +/* +%feature("autodoc", "0") molfile_open_file_read; +%rename (open_file_read) molfile_open_file_read; +%exception molfile_open_file_read { + $action + if (PyErr_Occurred()) SWIG_fail; +} +%inline %{ +PyObject * molfile_open_file_read(molfile_plugin_t* plugin, char *fname, int natoms) { + int *plugno = &plugin_no; + return plugin; + } +%} +*/ /* void *(* open_file_read)(const char *filepath, const char *filetype, int *natoms); diff --git a/pymolfile/molfile/libpymolfile.py b/pymolfile/molfile/libpymolfile.py index 99826d44affeba9f88384ea9f7c7c7f98d6e0212..504cde21c682b39139f1be654c5966b33f6d28d0 100644 --- a/pymolfile/molfile/libpymolfile.py +++ b/pymolfile/molfile/libpymolfile.py @@ -8,7 +8,7 @@ :Author: Berk Onat <b.onat@warwick.ac.uk> :Year: 2017 -:Licence: BSD LICENSE +:Licence: UIUC LICENSE @@ -113,26 +113,136 @@ pluginNOMEM = _libpymolfile.pluginNOMEM pluginENDOFFILE = _libpymolfile.pluginENDOFFILE pluginFILENOTFOUND = _libpymolfile.pluginFILENOTFOUND pluginFORMATERROR = _libpymolfile.pluginFORMATERROR +class MolAtoms(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, MolAtoms, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, MolAtoms, name) + __repr__ = _swig_repr + __swig_setmethods__["name"] = _libpymolfile.MolAtoms_name_set + __swig_getmethods__["name"] = _libpymolfile.MolAtoms_name_get + if _newclass: + name = _swig_property(_libpymolfile.MolAtoms_name_get, _libpymolfile.MolAtoms_name_set) + __swig_setmethods__["type"] = _libpymolfile.MolAtoms_type_set + __swig_getmethods__["type"] = _libpymolfile.MolAtoms_type_get + if _newclass: + type = _swig_property(_libpymolfile.MolAtoms_type_get, _libpymolfile.MolAtoms_type_set) + __swig_setmethods__["resname"] = _libpymolfile.MolAtoms_resname_set + __swig_getmethods__["resname"] = _libpymolfile.MolAtoms_resname_get + if _newclass: + resname = _swig_property(_libpymolfile.MolAtoms_resname_get, _libpymolfile.MolAtoms_resname_set) + __swig_setmethods__["resid"] = _libpymolfile.MolAtoms_resid_set + __swig_getmethods__["resid"] = _libpymolfile.MolAtoms_resid_get + if _newclass: + resid = _swig_property(_libpymolfile.MolAtoms_resid_get, _libpymolfile.MolAtoms_resid_set) + __swig_setmethods__["segid"] = _libpymolfile.MolAtoms_segid_set + __swig_getmethods__["segid"] = _libpymolfile.MolAtoms_segid_get + if _newclass: + segid = _swig_property(_libpymolfile.MolAtoms_segid_get, _libpymolfile.MolAtoms_segid_set) + __swig_setmethods__["chain"] = _libpymolfile.MolAtoms_chain_set + __swig_getmethods__["chain"] = _libpymolfile.MolAtoms_chain_get + if _newclass: + chain = _swig_property(_libpymolfile.MolAtoms_chain_get, _libpymolfile.MolAtoms_chain_set) + __swig_setmethods__["altloc"] = _libpymolfile.MolAtoms_altloc_set + __swig_getmethods__["altloc"] = _libpymolfile.MolAtoms_altloc_get + if _newclass: + altloc = _swig_property(_libpymolfile.MolAtoms_altloc_get, _libpymolfile.MolAtoms_altloc_set) + __swig_setmethods__["insertion"] = _libpymolfile.MolAtoms_insertion_set + __swig_getmethods__["insertion"] = _libpymolfile.MolAtoms_insertion_get + if _newclass: + insertion = _swig_property(_libpymolfile.MolAtoms_insertion_get, _libpymolfile.MolAtoms_insertion_set) + __swig_setmethods__["occupancy"] = _libpymolfile.MolAtoms_occupancy_set + __swig_getmethods__["occupancy"] = _libpymolfile.MolAtoms_occupancy_get + if _newclass: + occupancy = _swig_property(_libpymolfile.MolAtoms_occupancy_get, _libpymolfile.MolAtoms_occupancy_set) + __swig_setmethods__["bfactor"] = _libpymolfile.MolAtoms_bfactor_set + __swig_getmethods__["bfactor"] = _libpymolfile.MolAtoms_bfactor_get + if _newclass: + bfactor = _swig_property(_libpymolfile.MolAtoms_bfactor_get, _libpymolfile.MolAtoms_bfactor_set) + __swig_setmethods__["mass"] = _libpymolfile.MolAtoms_mass_set + __swig_getmethods__["mass"] = _libpymolfile.MolAtoms_mass_get + if _newclass: + mass = _swig_property(_libpymolfile.MolAtoms_mass_get, _libpymolfile.MolAtoms_mass_set) + __swig_setmethods__["charge"] = _libpymolfile.MolAtoms_charge_set + __swig_getmethods__["charge"] = _libpymolfile.MolAtoms_charge_get + if _newclass: + charge = _swig_property(_libpymolfile.MolAtoms_charge_get, _libpymolfile.MolAtoms_charge_set) + __swig_setmethods__["radius"] = _libpymolfile.MolAtoms_radius_set + __swig_getmethods__["radius"] = _libpymolfile.MolAtoms_radius_get + if _newclass: + radius = _swig_property(_libpymolfile.MolAtoms_radius_get, _libpymolfile.MolAtoms_radius_set) + __swig_setmethods__["atomicnumber"] = _libpymolfile.MolAtoms_atomicnumber_set + __swig_getmethods__["atomicnumber"] = _libpymolfile.MolAtoms_atomicnumber_get + if _newclass: + atomicnumber = _swig_property(_libpymolfile.MolAtoms_atomicnumber_get, _libpymolfile.MolAtoms_atomicnumber_set) + __swig_setmethods__["ctnumber"] = _libpymolfile.MolAtoms_ctnumber_set + __swig_getmethods__["ctnumber"] = _libpymolfile.MolAtoms_ctnumber_get + if _newclass: + ctnumber = _swig_property(_libpymolfile.MolAtoms_ctnumber_get, _libpymolfile.MolAtoms_ctnumber_set) + + def __init__(self): + this = _libpymolfile.new_MolAtoms() + try: + self.this.append(this) + except __builtin__.Exception: + self.this = this + __swig_destroy__ = _libpymolfile.delete_MolAtoms + __del__ = lambda self: None +MolAtoms_swigregister = _libpymolfile.MolAtoms_swigregister +MolAtoms_swigregister(MolAtoms) + + +def del_plugin_structure(pymolfile_atoms: 'PyObject *') -> "void": + return _libpymolfile.del_plugin_structure(pymolfile_atoms) +del_plugin_structure = _libpymolfile.del_plugin_structure + +def alloc_plugin_structure(arg1: 'PyObject *', args: 'PyObject *') -> "PyObject *": + return _libpymolfile.alloc_plugin_structure(arg1, args) +alloc_plugin_structure = _libpymolfile.alloc_plugin_structure + +def del_plugin(pymolfile_plugin: 'PyObject *') -> "void": + return _libpymolfile.del_plugin(pymolfile_plugin) +del_plugin = _libpymolfile.del_plugin -def molfile_plugin_list(maxsize): +def del_atoms(pymolfile_atoms: 'PyObject *') -> "void": + return _libpymolfile.del_atoms(pymolfile_atoms) +del_atoms = _libpymolfile.del_atoms + +def del_atomname(pymolfile_atoms: 'PyObject *') -> "void": + return _libpymolfile.del_atomname(pymolfile_atoms) +del_atomname = _libpymolfile.del_atomname + +def alloc_plugin(arg1: 'PyObject *', args: 'PyObject *') -> "PyObject *": + return _libpymolfile.alloc_plugin(arg1, args) +alloc_plugin = _libpymolfile.alloc_plugin + +def molfile_plugin_list(maxsize: 'int') -> "molfile_plugin_t **": """molfile_plugin_list(maxsize) -> molfile_plugin_t **""" return _libpymolfile.molfile_plugin_list(maxsize) -def molfile_init(): +def molfile_init() -> "int": """molfile_init() -> int""" return _libpymolfile.molfile_init() -def molfile_finish(): +def molfile_finish() -> "int": """molfile_finish() -> int""" return _libpymolfile.molfile_finish() -def get_plugin(plugin_list, plugin_no): +def get_plugin(plugin_list: 'molfile_plugin_t **', plugin_no: 'int') -> "molfile_plugin_t *": """get_plugin(plugin_list, plugin_no) -> molfile_plugin_t *""" return _libpymolfile.get_plugin(plugin_list, plugin_no) -def molfile_plugin_info(plugin_list, plugin_no): +def molfile_plugin_info(plugin_list: 'molfile_plugin_t **', plugin_no: 'int') -> "PyObject *": """molfile_plugin_info(plugin_list, plugin_no) -> PyObject *""" return _libpymolfile.molfile_plugin_info(plugin_list, plugin_no) + +def open_file_read(plugin: 'molfile_plugin_t *', fname: 'char *', ftype: 'char *', natoms: 'int') -> "PyObject *": + """open_file_read(plugin, fname, ftype, natoms) -> PyObject *""" + return _libpymolfile.open_file_read(plugin, fname, ftype, natoms) + +def read_structure(molpack: 'PyObject *') -> "PyObject *": + """read_structure(molpack) -> PyObject *""" + return _libpymolfile.read_structure(molpack) # This file is compatible with both classic and new-style classes. diff --git a/pymolfile/molfile/libpymolfile_wrap.c b/pymolfile/molfile/libpymolfile_wrap.c index 6f1adbdcb0d89209aadcc05ce50230698c431e8d..5b5f68509360007f255d744fe232957bf8eeb830 100644 --- a/pymolfile/molfile/libpymolfile_wrap.c +++ b/pymolfile/molfile/libpymolfile_wrap.c @@ -2979,11 +2979,12 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) { /* -------- TYPES TABLE (BEGIN) -------- */ -#define SWIGTYPE_p_char swig_types[0] -#define SWIGTYPE_p_int swig_types[1] +#define SWIGTYPE_p_MolAtoms swig_types[0] +#define SWIGTYPE_p_char swig_types[1] #define SWIGTYPE_p_molfile_plugin_t swig_types[2] -static swig_type_info *swig_types[4]; -static swig_module_info swig_module = {swig_types, 3, 0, 0, 0, 0}; +#define SWIGTYPE_p_p_molfile_plugin_t swig_types[3] +static swig_type_info *swig_types[5]; +static swig_module_info swig_module = {swig_types, 4, 0, 0, 0, 0}; #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) @@ -3020,10 +3021,12 @@ static swig_module_info swig_module = {swig_types, 3, 0, 0, 0, 0}; Published under BSD LICENSE */ #define SWIG_FILE_WITH_INIT +#define __STDC_FORMAT_MACROS #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> +#include <inttypes.h> #include "molfile_plugin.h" #include "libmolfile_plugin.h" #include "vmdplugin.h" @@ -3035,7 +3038,7 @@ static swig_module_info swig_module = {swig_types, 3, 0, 0, 0, 0}; #endif #include "stdio.h" #define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION -#include <numpy/arrayobject.h> +#include "numpy/arrayobject.h" SWIGINTERNINLINE PyObject* @@ -3045,54 +3048,241 @@ SWIGINTERNINLINE PyObject* } -PyObject * molfile_plugin_info(molfile_plugin_t *plugin_list, int plugin_no) { - molfile_plugin_t *plugin; - void *plugin_handle; - int has_readstructure = 0; - int has_readbonds = 0; - int has_readangles = 0; - int has_writestructure = 0; - int has_writebonds = 0; - int has_writeangles = 0; - int has_readnexttimestep = 0; - int has_writetimestep = 0; - int plugin_list_size = sizeof(plugin_list) / sizeof(molfile_plugin_t*); - if (&plugin_no==NULL || plugin_no<0 || plugin_no>plugin_list_size){ - PyErr_Format(PyExc_IOError, "[%d] Error: molfile plugin handle no should be given, be positive value and should not exceed the list length. You set '%d'", pluginNOINIT, plugin_no); - return 0; + + +struct MolAtoms { + char name[16]; + char type[16]; + char resname[8]; + int resid; + char segid[8]; + char chain[2]; + char altloc[2]; + char insertion[2]; + float occupancy; + float bfactor; + float mass; + float charge; + float radius; + float atomicnumber; + float ctnumber; +}; + +void del_plugin_structure(PyObject* pymolfile_atoms){ + delete (MolAtoms*)PyCapsule_GetPointer(pymolfile_atoms, "plugin_structure"); +} + +static PyObject* alloc_plugin_structure(PyObject *self, PyObject *args) { + return PyCapsule_New((void*)new MolAtoms(), "plugin_structure", del_plugin_structure); +} + +void del_plugin(PyObject* pymolfile_plugin){ + delete (MolObject*)PyCapsule_GetPointer(pymolfile_plugin, "plugin"); +} + +void del_atoms(PyObject* pymolfile_atoms){ + delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atoms"); +} + +void del_atomname(PyObject* pymolfile_atoms){ + delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atomname"); +} + + +static PyObject* alloc_plugin(PyObject *self, PyObject *args) { + return PyCapsule_New((void*)new MolObject(), "plugin_handle", del_plugin); +} + + + +SWIGINTERN swig_type_info* +SWIG_pchar_descriptor(void) +{ + static int init = 0; + static swig_type_info* info = 0; + if (!init) { + info = SWIG_TypeQuery("_p_char"); + init = 1; + } + return info; +} + + +SWIGINTERN int +SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) +{ +#if PY_VERSION_HEX>=0x03000000 +#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + if (PyBytes_Check(obj)) +#else + if (PyUnicode_Check(obj)) +#endif +#else + if (PyString_Check(obj)) +#endif + { + char *cstr; Py_ssize_t len; +#if PY_VERSION_HEX>=0x03000000 +#if !defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + if (!alloc && cptr) { + /* We can't allow converting without allocation, since the internal + representation of string in Python 3 is UCS-2/UCS-4 but we require + a UTF-8 representation. + TODO(bhy) More detailed explanation */ + return SWIG_RuntimeError; } - plugin = plugin_list[plugin_no]; - if(plugin==NULL || !plugin->open_file_read){ - PyErr_Format(PyExc_IOError, "[%d] Error: molfile plugin '%d' is not initialized.", pluginNOINIT, plugin_no); - return 0; + obj = PyUnicode_AsUTF8String(obj); + if(alloc) *alloc = SWIG_NEWOBJ; +#endif + PyBytes_AsStringAndSize(obj, &cstr, &len); +#else + PyString_AsStringAndSize(obj, &cstr, &len); +#endif + if (cptr) { + if (alloc) { + /* + In python the user should not be able to modify the inner + string representation. To warranty that, if you define + SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string + buffer is always returned. + + The default behavior is just to return the pointer value, + so, be careful. + */ +#if defined(SWIG_PYTHON_SAFE_CSTRINGS) + if (*alloc != SWIG_OLDOBJ) +#else + if (*alloc == SWIG_NEWOBJ) +#endif + { + *cptr = (char *)memcpy(malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1)); + *alloc = SWIG_NEWOBJ; + } else { + *cptr = cstr; + *alloc = SWIG_OLDOBJ; + } + } else { +#if PY_VERSION_HEX>=0x03000000 +#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + *cptr = PyBytes_AsString(obj); +#else + assert(0); /* Should never reach here with Unicode strings in Python 3 */ +#endif +#else + *cptr = SWIG_Python_str_AsChar(obj); +#endif + } } - if (plugin->read_structure) has_readstructure = 1; - if (plugin->read_bonds) has_readbonds = 1; - if (plugin->read_angles) has_readangles = 1; - if (plugin->read_next_timestep) has_readnexttimestep = 1; - if (plugin->write_structure) has_writestructure = 1; - if (plugin->write_bonds) has_writebonds = 1; - if (plugin->write_angles) has_writeangles = 1; - if (plugin->write_timestep) has_writetimestep = 1; - PyObject *tuple = PyTuple_New(16); - PyTuple_SET_ITEM(tuple, 0, PyString_FromString((const char)plugin->name)); - PyTuple_SET_ITEM(tuple, 1, PyInt_FromLong((long)has_readstructure)); - PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong((long)has_readbonds)); - PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong((long)has_readangles)); - PyTuple_SET_ITEM(tuple, 4, PyInt_FromLong((long)has_readnexttimestep)); - PyTuple_SET_ITEM(tuple, 5, PyInt_FromLong((long)has_writestructure)); - PyTuple_SET_ITEM(tuple, 6, PyInt_FromLong((long)has_writebonds)); - PyTuple_SET_ITEM(tuple, 7, PyInt_FromLong((long)has_writeangles)); - PyTuple_SET_ITEM(tuple, 8, PyInt_FromLong((long)has_writetimestep)); - PyTuple_SET_ITEM(tuple, 9, PyString_FromString((const char)plugin->prettyname)); - PyTuple_SET_ITEM(tuple, 10, PyString_FromString((const char)plugin->type)); - PyTuple_SET_ITEM(tuple, 11, PyString_FromString((const char)plugin->author)); - PyTuple_SET_ITEM(tuple, 12, PyInt_FromLong((long)plugin->majorv)); - PyTuple_SET_ITEM(tuple, 13, PyInt_FromLong((long)plugin->minorv)); - PyTuple_SET_ITEM(tuple, 14, PyInt_FromLong((long)plugin->abiversion)); - PyTuple_SET_ITEM(tuple, 15, PyInt_FromLong((long)plugin->is_reentrant)); - return tuple; + if (psize) *psize = len + 1; +#if PY_VERSION_HEX>=0x03000000 && !defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + Py_XDECREF(obj); +#endif + return SWIG_OK; + } else { +#if defined(SWIG_PYTHON_2_UNICODE) +#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) +#error "Cannot use both SWIG_PYTHON_2_UNICODE and SWIG_PYTHON_STRICT_BYTE_CHAR at once" +#endif +#if PY_VERSION_HEX<0x03000000 + if (PyUnicode_Check(obj)) { + char *cstr; Py_ssize_t len; + if (!alloc && cptr) { + return SWIG_RuntimeError; + } + obj = PyUnicode_AsUTF8String(obj); + if (PyString_AsStringAndSize(obj, &cstr, &len) != -1) { + if (cptr) { + if (alloc) *alloc = SWIG_NEWOBJ; + *cptr = (char *)memcpy(malloc((len + 1)*sizeof(char)), cstr, sizeof(char)*(len + 1)); + } + if (psize) *psize = len + 1; + + Py_XDECREF(obj); + return SWIG_OK; + } else { + Py_XDECREF(obj); + } + } +#endif +#endif + + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + if (pchar_descriptor) { + void* vptr = 0; + if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) { + if (cptr) *cptr = (char *) vptr; + if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0; + if (alloc) *alloc = SWIG_OLDOBJ; + return SWIG_OK; + } + } + } + return SWIG_TypeError; +} + + +SWIGINTERN int +SWIG_AsCharArray(PyObject * obj, char *val, size_t size) +{ + char* cptr = 0; size_t csize = 0; int alloc = SWIG_OLDOBJ; + int res = SWIG_AsCharPtrAndSize(obj, &cptr, &csize, &alloc); + if (SWIG_IsOK(res)) { + /* special case of single char conversion when we don't need space for NUL */ + if (size == 1 && csize == 2 && cptr && !cptr[1]) --csize; + if (csize <= size) { + if (val) { + if (csize) memcpy(val, cptr, csize*sizeof(char)); + if (csize < size) memset(val + csize, 0, (size - csize)*sizeof(char)); + } + if (alloc == SWIG_NEWOBJ) { + free((char*)cptr); + res = SWIG_DelNewMask(res); + } + return res; + } + if (alloc == SWIG_NEWOBJ) free((char*)cptr); + } + return SWIG_TypeError; +} + + +SWIGINTERNINLINE PyObject * +SWIG_FromCharPtrAndSize(const char* carray, size_t size) +{ + if (carray) { + if (size > INT_MAX) { + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + return pchar_descriptor ? + SWIG_InternalNewPointerObj((char *)(carray), pchar_descriptor, 0) : SWIG_Py_Void(); + } else { +#if PY_VERSION_HEX >= 0x03000000 +#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + return PyBytes_FromStringAndSize(carray, (Py_ssize_t)(size)); +#else +#if PY_VERSION_HEX >= 0x03010000 + return PyUnicode_DecodeUTF8(carray, (Py_ssize_t)(size), "surrogateescape"); +#else + return PyUnicode_FromStringAndSize(carray, (Py_ssize_t)(size)); +#endif +#endif +#else + return PyString_FromStringAndSize(carray, (Py_ssize_t)(size)); +#endif + } + } else { + return SWIG_Py_Void(); } +} + + +SWIGINTERN size_t +SWIG_strnlen(const char* s, size_t maxlen) +{ + const char *p; + for (p = s; maxlen-- && *p; p++) + ; + return p - s; +} #include <limits.h> @@ -3245,91 +3435,1437 @@ SWIG_AsVal_int (PyObject * obj, int *val) return res; } + +/* Getting isfinite working pre C99 across multiple platforms is non-trivial. Users can provide SWIG_isfinite on older platforms. */ +#ifndef SWIG_isfinite +/* isfinite() is a macro for C99 */ +# if defined(isfinite) +# define SWIG_isfinite(X) (isfinite(X)) +# elif defined __cplusplus && __cplusplus >= 201103L +/* Use a template so that this works whether isfinite() is std::isfinite() or + * in the global namespace. The reality seems to vary between compiler + * versions. + * + * Make sure namespace std exists to avoid compiler warnings. + * + * extern "C++" is required as this fragment can end up inside an extern "C" { } block + */ +namespace std { } +extern "C++" template<typename T> +inline int SWIG_isfinite_func(T x) { + using namespace std; + return isfinite(x); +} +# define SWIG_isfinite(X) (SWIG_isfinite_func(X)) +# elif defined(_MSC_VER) +# define SWIG_isfinite(X) (_finite(X)) +# elif defined(__sun) && defined(__SVR4) +# include <ieeefp.h> +# define SWIG_isfinite(X) (finite(X)) +# endif +#endif + + +/* Accept infinite as a valid float value unless we are unable to check if a value is finite */ +#ifdef SWIG_isfinite +# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX) && SWIG_isfinite(X)) +#else +# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX)) +#endif + + +SWIGINTERN int +SWIG_AsVal_float (PyObject * obj, float *val) +{ + double v; + int res = SWIG_AsVal_double (obj, &v); + if (SWIG_IsOK(res)) { + if (SWIG_Float_Overflow_Check(v)) { + return SWIG_OverflowError; + } else { + if (val) *val = (float)(v); + } + } + return res; +} + + + #define SWIG_From_double PyFloat_FromDouble + + +SWIGINTERNINLINE PyObject * +SWIG_From_float (float value) +{ + return SWIG_From_double (value); +} + + +PyObject * molfile_plugin_info(molfile_plugin_t** plugin_list, int plugin_no) { + molfile_plugin_t *plugin; + int *plugno = &plugin_no; + int has_readstructure = 0; + int has_readbonds = 0; + int has_readangles = 0; + int has_writestructure = 0; + int has_writebonds = 0; + int has_writeangles = 0; + int has_readnexttimestep = 0; + int has_writetimestep = 0; + int plugin_list_size = sizeof(plugin_list) / sizeof(molfile_plugin_t**); + if (plugno==NULL || plugin_no<0){ + PyErr_Format(PyExc_IOError, "[%d] Error: molfile plugin handle no should be given, be positive value and should not exceed the list length'%d'. You set '%d'", pluginNOINIT, plugin_list_size, plugin_no); + return 0; + } + plugin = plugin_list[plugin_no]; + if(plugin==NULL || !plugin->open_file_read){ + PyErr_Format(PyExc_IOError, "[%d] Error: molfile plugin '%d' is not initialized.", pluginNOINIT, plugin_no); + return 0; + } + if (plugin->read_structure) has_readstructure = 1; + if (plugin->read_bonds) has_readbonds = 1; + if (plugin->read_angles) has_readangles = 1; + if (plugin->read_next_timestep) has_readnexttimestep = 1; + if (plugin->write_structure) has_writestructure = 1; + if (plugin->write_bonds) has_writebonds = 1; + if (plugin->write_angles) has_writeangles = 1; + if (plugin->write_timestep) has_writetimestep = 1; + PyObject *tuple = PyTuple_New(17); + PyTuple_SET_ITEM(tuple, 0, PyString_FromString(plugin->filename_extension)); + PyTuple_SET_ITEM(tuple, 1, PyString_FromString(plugin->name)); + PyTuple_SET_ITEM(tuple, 2, PyInt_FromLong((long)has_readstructure)); + PyTuple_SET_ITEM(tuple, 3, PyInt_FromLong((long)has_readbonds)); + PyTuple_SET_ITEM(tuple, 4, PyInt_FromLong((long)has_readangles)); + PyTuple_SET_ITEM(tuple, 5, PyInt_FromLong((long)has_readnexttimestep)); + PyTuple_SET_ITEM(tuple, 6, PyInt_FromLong((long)has_writestructure)); + PyTuple_SET_ITEM(tuple, 7, PyInt_FromLong((long)has_writebonds)); + PyTuple_SET_ITEM(tuple, 8, PyInt_FromLong((long)has_writeangles)); + PyTuple_SET_ITEM(tuple, 9, PyInt_FromLong((long)has_writetimestep)); + PyTuple_SET_ITEM(tuple, 10, PyString_FromString(plugin->prettyname)); + PyTuple_SET_ITEM(tuple, 11, PyString_FromString(plugin->type)); + PyTuple_SET_ITEM(tuple, 12, PyString_FromString(plugin->author)); + PyTuple_SET_ITEM(tuple, 13, PyInt_FromLong((long)plugin->majorv)); + PyTuple_SET_ITEM(tuple, 14, PyInt_FromLong((long)plugin->minorv)); + PyTuple_SET_ITEM(tuple, 15, PyInt_FromLong((long)plugin->abiversion)); + PyTuple_SET_ITEM(tuple, 16, PyInt_FromLong((long)plugin->is_reentrant)); + return tuple; + } + + +PyObject * my_open_file_read(molfile_plugin_t* plugin, char* fname, char* ftype, int natoms) { + if (PyType_Ready(&MolObjectType) < 0) + return NULL; + PyTypeObject *type = &MolObjectType; + /*plugin_handle = PyCapsule_New((void*)new MolObject(), "plugin", del_plugin); */ + /*MolObject* plugin_c = new MolObject;*/ + MolObject *plugin_c; + plugin_c = (MolObject *)type->tp_alloc(type, 0); + /*PyObject * plugin_c = MolObject_new(&MolObjectType, args, kwds);*/ + plugin_c->plugin = plugin; + plugin_c->file_handle = plugin->open_file_read(fname, ftype, &natoms); + plugin_c->natoms = natoms; + /* PyCapsule_SetPointer(plugin_handle, &plugin_c); */ + /* PyObject* plugin_handle = PyCapsule_New((void*)plugin_c, "plugin", del_plugin); */ + PyObject* plugin_handle = (PyObject *)plugin_c; + /*if(!plugin_handle) printf("Not assigned\n");*/ + /*PyObject *tuple = PyTuple_New(2); + PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong((long)natoms)); + PyTuple_SET_ITEM(tuple, 1, plugin_handle);*/ + return plugin_handle; + } + + + + + +PyObject * my_read_structure(PyObject* molpack, int options) { + int i; + molfile_plugin_t* plugin; + void* file_handle; + molfile_atom_t* atoms; + int numatoms, status; + char** atom_names; + char** atom_types; + PyObject *npatoms = NULL; + /*MolObject* plugin_handle = (MolObject*)PyCapsule_GetPointer(molpack, "plugin");*/ + MolObject* plugin_handle = (MolObject*)molpack; + plugin = plugin_handle->plugin; + file_handle = plugin_handle->file_handle; + numatoms = plugin_handle->natoms; + atoms = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t)); + printf("Test1\n"); + status = plugin->read_structure(file_handle, &options, atoms); + printf("Test2 %d\n",status); + if (status!=0){ + PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into Python."); + return NULL; + } + printf("Test3\n"); + npy_intp natoms[1] = { numatoms }; + + PyArrayObject* oresid; + int64_t* cresid; + + int typenum; + int nd = 1; + npy_intp dims[1] = { numatoms }; + /*dims[0] = numatoms;*/ + oresid = (PyArrayObject*) PyArray_SimpleNew(nd, dims, NPY_INT64); + int n = oresid->dimensions[0]; + printf("dimensions %d\n", n); + cresid = (int64_t*) oresid->data; + + PyObject* npatomresid = NULL; + char** MolAtom_name = (char **)malloc(numatoms*sizeof(char*)); + char** MolAtom_type = (char **)malloc(numatoms*sizeof(char*)); + int64_t* MolAtom_resid = NULL; + /*int64_t* MolAtom_resid = (int64_t *)malloc(numatoms*sizeof(int64_t));*/ + float* MolAtom_mass = (float *)malloc(numatoms*sizeof(float)); + float* MolAtom_atomicnumber = (float *)malloc(numatoms*sizeof(float)); + for (i=0;i<numatoms;i++){ + MolAtom_name[i] = atoms[i].name; + MolAtom_type[i] = atoms[i].type; + printf("--->%d %d\n",i,atoms[i].resid); + oresid->data[i] = (int64_t) atoms[i].resid; + printf("%d %d\n",i,(int)oresid->data[i]); + MolAtom_mass[i] = atoms[i].mass; + MolAtom_atomicnumber[i] = atoms[i].atomicnumber; + } + /*Py_DECREF( obj );*/ + /*npy_intp dims[3];*/ /* PyArray_AsCArray is for ndim <= 3 */ + PyArray_Descr *descr; + npatoms = PyArray_SimpleNewFromData(1, natoms, NPY_USERDEF, atoms); + printf("Test4 numatoms=%d\n", numatoms); + PyObject* npatomname = NULL; + npatomname = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, MolAtom_name[0]); + PyObject* npatomtype = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, MolAtom_type); + /*PyObject* npatomresname = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->resname);*/ + /*PyObject* npatomsegid = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->segid);*/ + /*PyObject* npatomchain = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->chain);*/ + /*PyObject* npatomaltloc = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->altloc);*/ + /*PyObject* npatominsert = PyArray_SimpleNewFromData(1, natoms, NPY_STRING, atoms->insertion);*/ + /*PyObject* npatomoccup = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->occupancy);*/ + /*PyObject* npatombfact = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->bfactor);*/ + PyObject* npatommass = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, MolAtom_mass); + /*PyObject* npatomcharge = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->charge);*/ + /*PyObject* npatomradius = PyArray_SimpleNewFromData(1, natoms, NPY_FLOAT64, &atoms->radius);*/ + PyObject* npatomicnumber = PyArray_SimpleNewFromData(1, natoms, NPY_INT64, MolAtom_atomicnumber); + /*if (npatomname==NULL || npatomtype==NULL || npatomresname==NULL || + npatomresid==NULL || npatomsegid==NULL || npatomchain==NULL ) + { + free(atoms); + Py_XDECREF(npatomname); Py_XDECREF(npatomtype); + Py_XDECREF(npatomresname); Py_XDECREF(npatomresid); Py_XDECREF(npatomsegid); + Py_XDECREF(npatomchain); Py_XDECREF(npatomaltloc); Py_XDECREF(npatominsert); + Py_XDECREF(npatomoccup); Py_XDECREF(npatombfact); Py_XDECREF(npatommass); + Py_XDECREF(npatomcharge); Py_XDECREF(npatomradius); Py_XDECREF(npatomicnumber); + PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into Python."); + return 0; + } + PyArray_BASE(npatomname) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomtype) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomresname) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomresid) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomsegid) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomchain) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomaltloc) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatominsert) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomoccup) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatombfact) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatommass) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomcharge) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomradius) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatomicnumber) = PyCObject_FromVoidPtr(*atoms, free); + PyArray_BASE(npatoms) = PyCObject_FromVoidPtr(atoms, free); + PyArray_BASE((PyArrayObject *)npatoms) = PyCapsule_New(atoms, "atoms", del_atoms);*/ + /*PyArray_BASE((PyArrayObject *)npatoms); */ + printf("Test4-2\n"); + /*PyObject* Py_MolAtom_name = PyCapsule_New((void*)MolAtom_name, "atomname", del_atomname);*/ + /*PyObject* Py_MolAtom_name; + Py_INCREF(Py_MolAtom_name);*/ + printf("Test4-3\n"); + /*PyArray_SetBaseObject((PyArrayObject *)npatomname, Py_MolAtom_name);*/ + /*PyArray_SetBaseObject((PyArrayObject *)npatomtype, MolAtom_type); + PyArray_SetBaseObject((PyArrayObject *)npatomresid, MolAtom_resid); + PyArray_SetBaseObject((PyArrayObject *)npatommass, MolAtom_mass); + PyArray_SetBaseObject((PyArrayObject *)npatomicnumber, MolAtom_atomicnumber); */ + printf("Test5\n"); + PyObject *tuple = PyTuple_New(2); + PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong((long)natoms)); + printf("Test6\n"); + PyTuple_SET_ITEM(tuple, 1, npatomname); + /*PyTuple_SET_ITEM(tuple, 2, npatomtype); + PyTuple_SET_ITEM(tuple, 3, npatomresid); + PyTuple_SET_ITEM(tuple, 4, npatommass); + PyTuple_SET_ITEM(tuple, 5, npatomicnumber);*/ + PyObject* vars = PyDict_New(); +/* printf("Test7\n"); + PyDict_SetItemString( vars, "name", npatomname ); */ + printf("Test8\n"); + /*PyDict_SetItemString( vars, "resid", npatomresid ); */ + return Py_BuildValue("O", oresid); + } + #ifdef __cplusplus extern "C" { #endif -SWIGINTERN PyObject *_wrap_molfile_plugin_list(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_MolAtoms_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - int *arg1 = (int *) 0 ; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + char *arg2 ; void *argp1 = 0 ; int res1 = 0 ; + char temp2[16] ; + int res2 ; PyObject * obj0 = 0 ; - molfile_plugin_t *result = 0 ; + PyObject * obj1 = 0 ; - if (!PyArg_ParseTuple(args,(char *)"O:molfile_plugin_list",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_int, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_name_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "molfile_plugin_list" "', argument " "1"" of type '" "int *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_name_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); } - arg1 = (int *)(argp1); - result = (molfile_plugin_t *)molfile_plugin_list(arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_molfile_plugin_t, 0 | 0 ); + arg1 = (struct MolAtoms *)(argp1); + res2 = SWIG_AsCharArray(obj1, temp2, 16); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_name_set" "', argument " "2"" of type '" "char [16]""'"); + } + arg2 = (char *)(temp2); + if (arg2) memcpy(arg1->name,arg2,16*sizeof(char)); + else memset(arg1->name,0,16*sizeof(char)); + resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_molfile_init(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_MolAtoms_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - molfile_plugin_t *arg1 = (molfile_plugin_t *) 0 ; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; void *argp1 = 0 ; int res1 = 0 ; PyObject * obj0 = 0 ; - int result; + char *result = 0 ; - if (!PyArg_ParseTuple(args,(char *)"O:molfile_init",&obj0)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_molfile_plugin_t, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_name_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "molfile_init" "', argument " "1"" of type '" "molfile_plugin_t *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_name_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + result = (char *)(char *) ((arg1)->name); + { + size_t size = SWIG_strnlen(result, 16); + + + + resultobj = SWIG_FromCharPtrAndSize(result, size); } - arg1 = (molfile_plugin_t *)(argp1); - result = (int)molfile_init(arg1); - resultobj = SWIG_From_int((int)(result)); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_molfile_finish(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_MolAtoms_type_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - int result; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + char *arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + char temp2[16] ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; - if (!PyArg_ParseTuple(args,(char *)":molfile_finish")) SWIG_fail; - result = (int)molfile_finish(); - resultobj = SWIG_From_int((int)(result)); + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_type_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_type_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + res2 = SWIG_AsCharArray(obj1, temp2, 16); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_type_set" "', argument " "2"" of type '" "char [16]""'"); + } + arg2 = (char *)(temp2); + if (arg2) memcpy(arg1->type,arg2,16*sizeof(char)); + else memset(arg1->type,0,16*sizeof(char)); + resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_molfile_plugin_info(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_MolAtoms_type_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - molfile_plugin_t *arg1 = (molfile_plugin_t *) 0 ; - int arg2 ; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; void *argp1 = 0 ; int res1 = 0 ; - int val2 ; - int ecode2 = 0 ; PyObject * obj0 = 0 ; - PyObject * obj1 = 0 ; - PyObject *result = 0 ; + char *result = 0 ; - if (!PyArg_ParseTuple(args,(char *)"OO:molfile_plugin_info",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_molfile_plugin_t, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_type_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "molfile_plugin_info" "', argument " "1"" of type '" "molfile_plugin_t *""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_type_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); } - arg1 = (molfile_plugin_t *)(argp1); - ecode2 = SWIG_AsVal_int(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "molfile_plugin_info" "', argument " "2"" of type '" "int""'"); - } - arg2 = (int)(val2); + arg1 = (struct MolAtoms *)(argp1); + result = (char *)(char *) ((arg1)->type); { - result = (PyObject *)molfile_plugin_info(arg1,arg2); + size_t size = SWIG_strnlen(result, 16); + + + + resultobj = SWIG_FromCharPtrAndSize(result, size); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_resname_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + char *arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + char temp2[8] ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_resname_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resname_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + res2 = SWIG_AsCharArray(obj1, temp2, 8); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_resname_set" "', argument " "2"" of type '" "char [8]""'"); + } + arg2 = (char *)(temp2); + if (arg2) memcpy(arg1->resname,arg2,8*sizeof(char)); + else memset(arg1->resname,0,8*sizeof(char)); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_resname_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + char *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_resname_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resname_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + result = (char *)(char *) ((arg1)->resname); + { + size_t size = SWIG_strnlen(result, 8); + + + + resultobj = SWIG_FromCharPtrAndSize(result, size); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_resid_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + int arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + int val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_resid_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resid_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_resid_set" "', argument " "2"" of type '" "int""'"); + } + arg2 = (int)(val2); + if (arg1) (arg1)->resid = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_resid_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_resid_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resid_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + result = (int) ((arg1)->resid); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_segid_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + char *arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + char temp2[8] ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_segid_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_segid_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + res2 = SWIG_AsCharArray(obj1, temp2, 8); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_segid_set" "', argument " "2"" of type '" "char [8]""'"); + } + arg2 = (char *)(temp2); + if (arg2) memcpy(arg1->segid,arg2,8*sizeof(char)); + else memset(arg1->segid,0,8*sizeof(char)); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_segid_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + char *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_segid_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_segid_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + result = (char *)(char *) ((arg1)->segid); + { + size_t size = SWIG_strnlen(result, 8); + + + + resultobj = SWIG_FromCharPtrAndSize(result, size); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_chain_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + char *arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + char temp2[2] ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_chain_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_chain_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + res2 = SWIG_AsCharArray(obj1, temp2, 2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_chain_set" "', argument " "2"" of type '" "char [2]""'"); + } + arg2 = (char *)(temp2); + if (arg2) memcpy(arg1->chain,arg2,2*sizeof(char)); + else memset(arg1->chain,0,2*sizeof(char)); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_chain_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + char *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_chain_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_chain_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + result = (char *)(char *) ((arg1)->chain); + { + size_t size = SWIG_strnlen(result, 2); + + + + resultobj = SWIG_FromCharPtrAndSize(result, size); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_altloc_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + char *arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + char temp2[2] ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_altloc_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_altloc_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + res2 = SWIG_AsCharArray(obj1, temp2, 2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_altloc_set" "', argument " "2"" of type '" "char [2]""'"); + } + arg2 = (char *)(temp2); + if (arg2) memcpy(arg1->altloc,arg2,2*sizeof(char)); + else memset(arg1->altloc,0,2*sizeof(char)); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_altloc_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + char *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_altloc_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_altloc_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + result = (char *)(char *) ((arg1)->altloc); + { + size_t size = SWIG_strnlen(result, 2); + + + + resultobj = SWIG_FromCharPtrAndSize(result, size); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_insertion_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + char *arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + char temp2[2] ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_insertion_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_insertion_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + res2 = SWIG_AsCharArray(obj1, temp2, 2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_insertion_set" "', argument " "2"" of type '" "char [2]""'"); + } + arg2 = (char *)(temp2); + if (arg2) memcpy(arg1->insertion,arg2,2*sizeof(char)); + else memset(arg1->insertion,0,2*sizeof(char)); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_insertion_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + char *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_insertion_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_insertion_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + result = (char *)(char *) ((arg1)->insertion); + { + size_t size = SWIG_strnlen(result, 2); + + + + resultobj = SWIG_FromCharPtrAndSize(result, size); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_occupancy_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + float arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_occupancy_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_occupancy_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_occupancy_set" "', argument " "2"" of type '" "float""'"); + } + arg2 = (float)(val2); + if (arg1) (arg1)->occupancy = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_occupancy_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_occupancy_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_occupancy_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + result = (float) ((arg1)->occupancy); + resultobj = SWIG_From_float((float)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_bfactor_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + float arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_bfactor_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_bfactor_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_bfactor_set" "', argument " "2"" of type '" "float""'"); + } + arg2 = (float)(val2); + if (arg1) (arg1)->bfactor = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_bfactor_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_bfactor_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_bfactor_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + result = (float) ((arg1)->bfactor); + resultobj = SWIG_From_float((float)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_mass_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + float arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_mass_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_mass_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_mass_set" "', argument " "2"" of type '" "float""'"); + } + arg2 = (float)(val2); + if (arg1) (arg1)->mass = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_mass_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_mass_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_mass_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + result = (float) ((arg1)->mass); + resultobj = SWIG_From_float((float)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_charge_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + float arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_charge_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_charge_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_charge_set" "', argument " "2"" of type '" "float""'"); + } + arg2 = (float)(val2); + if (arg1) (arg1)->charge = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_charge_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_charge_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_charge_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + result = (float) ((arg1)->charge); + resultobj = SWIG_From_float((float)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_radius_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + float arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_radius_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_radius_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_radius_set" "', argument " "2"" of type '" "float""'"); + } + arg2 = (float)(val2); + if (arg1) (arg1)->radius = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_radius_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_radius_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_radius_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + result = (float) ((arg1)->radius); + resultobj = SWIG_From_float((float)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_atomicnumber_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + float arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_atomicnumber_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_atomicnumber_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_atomicnumber_set" "', argument " "2"" of type '" "float""'"); + } + arg2 = (float)(val2); + if (arg1) (arg1)->atomicnumber = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_atomicnumber_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_atomicnumber_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_atomicnumber_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + result = (float) ((arg1)->atomicnumber); + resultobj = SWIG_From_float((float)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_ctnumber_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + float arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_ctnumber_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_ctnumber_set" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_ctnumber_set" "', argument " "2"" of type '" "float""'"); + } + arg2 = (float)(val2); + if (arg1) (arg1)->ctnumber = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_ctnumber_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_ctnumber_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_ctnumber_get" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + result = (float) ((arg1)->ctnumber); + resultobj = SWIG_From_float((float)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_MolAtoms(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_MolAtoms")) SWIG_fail; + result = (struct MolAtoms *)calloc(1, sizeof(struct MolAtoms)); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MolAtoms, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_MolAtoms(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + struct MolAtoms *arg1 = (struct MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_MolAtoms",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_MolAtoms" "', argument " "1"" of type '" "struct MolAtoms *""'"); + } + arg1 = (struct MolAtoms *)(argp1); + free((char *) arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *MolAtoms_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_MolAtoms, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_del_plugin_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + PyObject *arg1 = (PyObject *) 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:del_plugin_structure",&obj0)) SWIG_fail; + arg1 = obj0; + del_plugin_structure(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_alloc_plugin_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + PyObject *arg1 = (PyObject *) 0 ; + PyObject *arg2 = (PyObject *) 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:alloc_plugin_structure",&obj0,&obj1)) SWIG_fail; + arg1 = obj0; + arg2 = obj1; + result = (PyObject *)alloc_plugin_structure(arg1,arg2); + resultobj = result; + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_del_plugin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + PyObject *arg1 = (PyObject *) 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:del_plugin",&obj0)) SWIG_fail; + arg1 = obj0; + del_plugin(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_del_atoms(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + PyObject *arg1 = (PyObject *) 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:del_atoms",&obj0)) SWIG_fail; + arg1 = obj0; + del_atoms(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_del_atomname(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + PyObject *arg1 = (PyObject *) 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:del_atomname",&obj0)) SWIG_fail; + arg1 = obj0; + del_atomname(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_alloc_plugin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + PyObject *arg1 = (PyObject *) 0 ; + PyObject *arg2 = (PyObject *) 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:alloc_plugin",&obj0,&obj1)) SWIG_fail; + arg1 = obj0; + arg2 = obj1; + result = (PyObject *)alloc_plugin(arg1,arg2); + resultobj = result; + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_molfile_plugin_list(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int arg1 ; + int val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + molfile_plugin_t **result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:molfile_plugin_list",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_int(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "molfile_plugin_list" "', argument " "1"" of type '" "int""'"); + } + arg1 = (int)(val1); + result = (molfile_plugin_t **)molfile_plugin_list(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_p_molfile_plugin_t, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_molfile_init(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":molfile_init")) SWIG_fail; + result = (int)molfile_init(); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_molfile_finish(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":molfile_finish")) SWIG_fail; + result = (int)molfile_finish(); + resultobj = SWIG_From_int((int)(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_get_plugin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + molfile_plugin_t **arg1 = (molfile_plugin_t **) 0 ; + int arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + int val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + molfile_plugin_t *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:get_plugin",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_p_molfile_plugin_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_plugin" "', argument " "1"" of type '" "molfile_plugin_t **""'"); + } + arg1 = (molfile_plugin_t **)(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_plugin" "', argument " "2"" of type '" "int""'"); + } + arg2 = (int)(val2); + result = (molfile_plugin_t *)get_plugin(arg1,arg2); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_molfile_plugin_t, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_molfile_plugin_info(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + molfile_plugin_t **arg1 = (molfile_plugin_t **) 0 ; + int arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + int val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:molfile_plugin_info",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_p_molfile_plugin_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "molfile_plugin_info" "', argument " "1"" of type '" "molfile_plugin_t **""'"); + } + arg1 = (molfile_plugin_t **)(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "molfile_plugin_info" "', argument " "2"" of type '" "int""'"); + } + arg2 = (int)(val2); + { + result = (PyObject *)molfile_plugin_info(arg1,arg2); + if (PyErr_Occurred()) SWIG_fail; + } + resultobj = result; + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_open_file_read(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + molfile_plugin_t *arg1 = (molfile_plugin_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + int val4 ; + int ecode4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:open_file_read",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_molfile_plugin_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "open_file_read" "', argument " "1"" of type '" "molfile_plugin_t *""'"); + } + arg1 = (molfile_plugin_t *)(argp1); + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "open_file_read" "', argument " "2"" of type '" "char *""'"); + } + arg2 = (char *)(buf2); + res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "open_file_read" "', argument " "3"" of type '" "char *""'"); + } + arg3 = (char *)(buf3); + ecode4 = SWIG_AsVal_int(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "open_file_read" "', argument " "4"" of type '" "int""'"); + } + arg4 = (int)(val4); + { + result = (PyObject *)my_open_file_read(arg1,arg2,arg3,arg4); + if (PyErr_Occurred()) SWIG_fail; + } + resultobj = result; + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return resultobj; +fail: + if (alloc2 == SWIG_NEWOBJ) free((char*)buf2); + if (alloc3 == SWIG_NEWOBJ) free((char*)buf3); + return NULL; +} + + +SWIGINTERN PyObject *_wrap_read_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + PyObject *arg1 = (PyObject *) 0 ; + int arg2 ; + int val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:read_structure",&obj0,&obj1)) SWIG_fail; + arg1 = obj0; + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "read_structure" "', argument " "2"" of type '" "int""'"); + } + arg2 = (int)(val2); + { + result = (PyObject *)my_read_structure(arg1,arg2); if (PyErr_Occurred()) SWIG_fail; } resultobj = result; @@ -3341,34 +4877,80 @@ fail: static PyMethodDef SwigMethods[] = { { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL}, - { (char *)"molfile_plugin_list", _wrap_molfile_plugin_list, METH_VARARGS, (char *)"molfile_plugin_list(maxsize) -> molfile_plugin_t *"}, - { (char *)"molfile_init", _wrap_molfile_init, METH_VARARGS, (char *)"molfile_init(plugin_list) -> int"}, + { (char *)"MolAtoms_name_set", _wrap_MolAtoms_name_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_name_get", _wrap_MolAtoms_name_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_type_set", _wrap_MolAtoms_type_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_type_get", _wrap_MolAtoms_type_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_resname_set", _wrap_MolAtoms_resname_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_resname_get", _wrap_MolAtoms_resname_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_resid_set", _wrap_MolAtoms_resid_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_resid_get", _wrap_MolAtoms_resid_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_segid_set", _wrap_MolAtoms_segid_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_segid_get", _wrap_MolAtoms_segid_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_chain_set", _wrap_MolAtoms_chain_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_chain_get", _wrap_MolAtoms_chain_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_altloc_set", _wrap_MolAtoms_altloc_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_altloc_get", _wrap_MolAtoms_altloc_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_insertion_set", _wrap_MolAtoms_insertion_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_insertion_get", _wrap_MolAtoms_insertion_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_occupancy_set", _wrap_MolAtoms_occupancy_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_occupancy_get", _wrap_MolAtoms_occupancy_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_bfactor_set", _wrap_MolAtoms_bfactor_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_bfactor_get", _wrap_MolAtoms_bfactor_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_mass_set", _wrap_MolAtoms_mass_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_mass_get", _wrap_MolAtoms_mass_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_charge_set", _wrap_MolAtoms_charge_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_charge_get", _wrap_MolAtoms_charge_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_radius_set", _wrap_MolAtoms_radius_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_radius_get", _wrap_MolAtoms_radius_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_atomicnumber_set", _wrap_MolAtoms_atomicnumber_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_atomicnumber_get", _wrap_MolAtoms_atomicnumber_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_ctnumber_set", _wrap_MolAtoms_ctnumber_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_ctnumber_get", _wrap_MolAtoms_ctnumber_get, METH_VARARGS, NULL}, + { (char *)"new_MolAtoms", _wrap_new_MolAtoms, METH_VARARGS, NULL}, + { (char *)"delete_MolAtoms", _wrap_delete_MolAtoms, METH_VARARGS, NULL}, + { (char *)"MolAtoms_swigregister", MolAtoms_swigregister, METH_VARARGS, NULL}, + { (char *)"del_plugin_structure", _wrap_del_plugin_structure, METH_VARARGS, NULL}, + { (char *)"alloc_plugin_structure", _wrap_alloc_plugin_structure, METH_VARARGS, NULL}, + { (char *)"del_plugin", _wrap_del_plugin, METH_VARARGS, NULL}, + { (char *)"del_atoms", _wrap_del_atoms, METH_VARARGS, NULL}, + { (char *)"del_atomname", _wrap_del_atomname, METH_VARARGS, NULL}, + { (char *)"alloc_plugin", _wrap_alloc_plugin, METH_VARARGS, NULL}, + { (char *)"molfile_plugin_list", _wrap_molfile_plugin_list, METH_VARARGS, (char *)"molfile_plugin_list(maxsize) -> molfile_plugin_t **"}, + { (char *)"molfile_init", _wrap_molfile_init, METH_VARARGS, (char *)"molfile_init() -> int"}, { (char *)"molfile_finish", _wrap_molfile_finish, METH_VARARGS, (char *)"molfile_finish() -> int"}, + { (char *)"get_plugin", _wrap_get_plugin, METH_VARARGS, (char *)"get_plugin(plugin_list, plugin_no) -> molfile_plugin_t *"}, { (char *)"molfile_plugin_info", _wrap_molfile_plugin_info, METH_VARARGS, (char *)"molfile_plugin_info(plugin_list, plugin_no) -> PyObject *"}, + { (char *)"open_file_read", _wrap_open_file_read, METH_VARARGS, (char *)"open_file_read(plugin, fname, ftype, natoms) -> PyObject *"}, + { (char *)"read_structure", _wrap_read_structure, METH_VARARGS, (char *)"read_structure(molpack, options) -> PyObject *"}, { NULL, NULL, 0, NULL } }; /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ +static swig_type_info _swigt__p_MolAtoms = {"_p_MolAtoms", "struct MolAtoms *|MolAtoms *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; -static swig_type_info _swigt__p_int = {"_p_int", "int *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_molfile_plugin_t = {"_p_molfile_plugin_t", "molfile_plugin_t *", 0, 0, (void*)0, 0}; +static swig_type_info _swigt__p_p_molfile_plugin_t = {"_p_p_molfile_plugin_t", "molfile_plugin_t **", 0, 0, (void*)0, 0}; static swig_type_info *swig_type_initial[] = { + &_swigt__p_MolAtoms, &_swigt__p_char, - &_swigt__p_int, &_swigt__p_molfile_plugin_t, + &_swigt__p_p_molfile_plugin_t, }; +static swig_cast_info _swigc__p_MolAtoms[] = { {&_swigt__p_MolAtoms, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; -static swig_cast_info _swigc__p_int[] = { {&_swigt__p_int, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_molfile_plugin_t[] = { {&_swigt__p_molfile_plugin_t, 0, 0, 0},{0, 0, 0, 0}}; +static swig_cast_info _swigc__p_p_molfile_plugin_t[] = { {&_swigt__p_p_molfile_plugin_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info *swig_cast_initial[] = { + _swigc__p_MolAtoms, _swigc__p_char, - _swigc__p_int, _swigc__p_molfile_plugin_t, + _swigc__p_p_molfile_plugin_t, }; @@ -4060,6 +5642,7 @@ SWIG_init(void) { SWIG_InstallConstants(d,swig_const_table); + Py_Initialize(); import_array(); SWIG_Python_SetConstant(d, "pluginOK",SWIG_From_int((int)(pluginOK))); @@ -4069,9 +5652,6 @@ SWIG_init(void) { SWIG_Python_SetConstant(d, "pluginENDOFFILE",SWIG_From_int((int)(pluginENDOFFILE))); SWIG_Python_SetConstant(d, "pluginFILENOTFOUND",SWIG_From_int((int)(pluginFILENOTFOUND))); SWIG_Python_SetConstant(d, "pluginFORMATERROR",SWIG_From_int((int)(pluginFORMATERROR))); - SWIG_Python_SetConstant(d, "SEEK_SET",SWIG_From_int((int)(SEEK_SET))); - SWIG_Python_SetConstant(d, "SEEK_CUR",SWIG_From_int((int)(SEEK_CUR))); - SWIG_Python_SetConstant(d, "SEEK_END",SWIG_From_int((int)(SEEK_END))); #if PY_VERSION_HEX >= 0x03000000 return m; #else diff --git a/pymolfile/molfile/libpymolfile_wrap.cxx b/pymolfile/molfile/libpymolfile_wrap.cxx index a29b996585521d9172c15dca7a7f2811c71dc908..95bdb95e9932318e5292506992be9aab7f63405f 100644 --- a/pymolfile/molfile/libpymolfile_wrap.cxx +++ b/pymolfile/molfile/libpymolfile_wrap.cxx @@ -3003,11 +3003,12 @@ SWIG_Python_NonDynamicSetAttr(PyObject *obj, PyObject *name, PyObject *value) { /* -------- TYPES TABLE (BEGIN) -------- */ -#define SWIGTYPE_p_char swig_types[0] -#define SWIGTYPE_p_molfile_plugin_t swig_types[1] -#define SWIGTYPE_p_p_molfile_plugin_t swig_types[2] -static swig_type_info *swig_types[4]; -static swig_module_info swig_module = {swig_types, 3, 0, 0, 0, 0}; +#define SWIGTYPE_p_MolAtoms swig_types[0] +#define SWIGTYPE_p_char swig_types[1] +#define SWIGTYPE_p_molfile_plugin_t swig_types[2] +#define SWIGTYPE_p_p_molfile_plugin_t swig_types[3] +static swig_type_info *swig_types[5]; +static swig_module_info swig_module = {swig_types, 4, 0, 0, 0, 0}; #define SWIG_TypeQuery(name) SWIG_TypeQueryModule(&swig_module, &swig_module, name) #define SWIG_MangledTypeQuery(name) SWIG_MangledTypeQueryModule(&swig_module, &swig_module, name) @@ -3117,10 +3118,12 @@ namespace swig { Published under BSD LICENSE */ #define SWIG_FILE_WITH_INIT +#define __STDC_FORMAT_MACROS #include <stdio.h> #include <stdlib.h> #include <ctype.h> #include <string.h> +#include <inttypes.h> #include "molfile_plugin.h" #include "libmolfile_plugin.h" #include "vmdplugin.h" @@ -3145,6 +3148,243 @@ SWIGINTERNINLINE PyObject* } + + +struct MolAtoms { + char name[16]; + char type[16]; + char resname[8]; + int resid; + char segid[8]; + char chain[2]; + char altloc[2]; + char insertion[2]; + float occupancy; + float bfactor; + float mass; + float charge; + float radius; + float atomicnumber; + float ctnumber; +}; + +void del_plugin_structure(PyObject* pymolfile_atoms){ + delete (MolAtoms*)PyCapsule_GetPointer(pymolfile_atoms, "plugin_structure"); +} + +static PyObject* alloc_plugin_structure(PyObject *self, PyObject *args) { + return PyCapsule_New((void*)new MolAtoms(), "plugin_structure", del_plugin_structure); +} + +void del_plugin(PyObject* pymolfile_plugin){ + delete (MolObject*)PyCapsule_GetPointer(pymolfile_plugin, "plugin"); +} + +void del_atoms(PyObject* pymolfile_atoms){ + delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atoms"); +} + +void del_atomname(PyObject* pymolfile_atoms){ + delete (PyObject*)PyCapsule_GetPointer(pymolfile_atoms, "atomname"); +} + + +static PyObject* alloc_plugin(PyObject *self, PyObject *args) { + return PyCapsule_New((void*)new MolObject(), "plugin_handle", del_plugin); +} + + + +SWIGINTERN swig_type_info* +SWIG_pchar_descriptor(void) +{ + static int init = 0; + static swig_type_info* info = 0; + if (!init) { + info = SWIG_TypeQuery("_p_char"); + init = 1; + } + return info; +} + + +SWIGINTERN int +SWIG_AsCharPtrAndSize(PyObject *obj, char** cptr, size_t* psize, int *alloc) +{ +#if PY_VERSION_HEX>=0x03000000 +#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + if (PyBytes_Check(obj)) +#else + if (PyUnicode_Check(obj)) +#endif +#else + if (PyString_Check(obj)) +#endif + { + char *cstr; Py_ssize_t len; +#if PY_VERSION_HEX>=0x03000000 +#if !defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + if (!alloc && cptr) { + /* We can't allow converting without allocation, since the internal + representation of string in Python 3 is UCS-2/UCS-4 but we require + a UTF-8 representation. + TODO(bhy) More detailed explanation */ + return SWIG_RuntimeError; + } + obj = PyUnicode_AsUTF8String(obj); + if(alloc) *alloc = SWIG_NEWOBJ; +#endif + PyBytes_AsStringAndSize(obj, &cstr, &len); +#else + PyString_AsStringAndSize(obj, &cstr, &len); +#endif + if (cptr) { + if (alloc) { + /* + In python the user should not be able to modify the inner + string representation. To warranty that, if you define + SWIG_PYTHON_SAFE_CSTRINGS, a new/copy of the python string + buffer is always returned. + + The default behavior is just to return the pointer value, + so, be careful. + */ +#if defined(SWIG_PYTHON_SAFE_CSTRINGS) + if (*alloc != SWIG_OLDOBJ) +#else + if (*alloc == SWIG_NEWOBJ) +#endif + { + *cptr = reinterpret_cast< char* >(memcpy(new char[len + 1], cstr, sizeof(char)*(len + 1))); + *alloc = SWIG_NEWOBJ; + } else { + *cptr = cstr; + *alloc = SWIG_OLDOBJ; + } + } else { +#if PY_VERSION_HEX>=0x03000000 +#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + *cptr = PyBytes_AsString(obj); +#else + assert(0); /* Should never reach here with Unicode strings in Python 3 */ +#endif +#else + *cptr = SWIG_Python_str_AsChar(obj); +#endif + } + } + if (psize) *psize = len + 1; +#if PY_VERSION_HEX>=0x03000000 && !defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + Py_XDECREF(obj); +#endif + return SWIG_OK; + } else { +#if defined(SWIG_PYTHON_2_UNICODE) +#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) +#error "Cannot use both SWIG_PYTHON_2_UNICODE and SWIG_PYTHON_STRICT_BYTE_CHAR at once" +#endif +#if PY_VERSION_HEX<0x03000000 + if (PyUnicode_Check(obj)) { + char *cstr; Py_ssize_t len; + if (!alloc && cptr) { + return SWIG_RuntimeError; + } + obj = PyUnicode_AsUTF8String(obj); + if (PyString_AsStringAndSize(obj, &cstr, &len) != -1) { + if (cptr) { + if (alloc) *alloc = SWIG_NEWOBJ; + *cptr = reinterpret_cast< char* >(memcpy(new char[len + 1], cstr, sizeof(char)*(len + 1))); + } + if (psize) *psize = len + 1; + + Py_XDECREF(obj); + return SWIG_OK; + } else { + Py_XDECREF(obj); + } + } +#endif +#endif + + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + if (pchar_descriptor) { + void* vptr = 0; + if (SWIG_ConvertPtr(obj, &vptr, pchar_descriptor, 0) == SWIG_OK) { + if (cptr) *cptr = (char *) vptr; + if (psize) *psize = vptr ? (strlen((char *)vptr) + 1) : 0; + if (alloc) *alloc = SWIG_OLDOBJ; + return SWIG_OK; + } + } + } + return SWIG_TypeError; +} + + +SWIGINTERN int +SWIG_AsCharArray(PyObject * obj, char *val, size_t size) +{ + char* cptr = 0; size_t csize = 0; int alloc = SWIG_OLDOBJ; + int res = SWIG_AsCharPtrAndSize(obj, &cptr, &csize, &alloc); + if (SWIG_IsOK(res)) { + /* special case of single char conversion when we don't need space for NUL */ + if (size == 1 && csize == 2 && cptr && !cptr[1]) --csize; + if (csize <= size) { + if (val) { + if (csize) memcpy(val, cptr, csize*sizeof(char)); + if (csize < size) memset(val + csize, 0, (size - csize)*sizeof(char)); + } + if (alloc == SWIG_NEWOBJ) { + delete[] cptr; + res = SWIG_DelNewMask(res); + } + return res; + } + if (alloc == SWIG_NEWOBJ) delete[] cptr; + } + return SWIG_TypeError; +} + + +SWIGINTERNINLINE PyObject * +SWIG_FromCharPtrAndSize(const char* carray, size_t size) +{ + if (carray) { + if (size > INT_MAX) { + swig_type_info* pchar_descriptor = SWIG_pchar_descriptor(); + return pchar_descriptor ? + SWIG_InternalNewPointerObj(const_cast< char * >(carray), pchar_descriptor, 0) : SWIG_Py_Void(); + } else { +#if PY_VERSION_HEX >= 0x03000000 +#if defined(SWIG_PYTHON_STRICT_BYTE_CHAR) + return PyBytes_FromStringAndSize(carray, static_cast< Py_ssize_t >(size)); +#else +#if PY_VERSION_HEX >= 0x03010000 + return PyUnicode_DecodeUTF8(carray, static_cast< Py_ssize_t >(size), "surrogateescape"); +#else + return PyUnicode_FromStringAndSize(carray, static_cast< Py_ssize_t >(size)); +#endif +#endif +#else + return PyString_FromStringAndSize(carray, static_cast< Py_ssize_t >(size)); +#endif + } + } else { + return SWIG_Py_Void(); + } +} + + +SWIGINTERN size_t +SWIG_strnlen(const char* s, size_t maxlen) +{ + const char *p; + for (p = s; maxlen-- && *p; p++) + ; + return p - s; +} + + #include <limits.h> #if !defined(SWIG_NO_LLONG_MAX) # if !defined(LLONG_MAX) && defined(__GNUC__) && defined (__LONG_LONG_MAX__) @@ -3296,6 +3536,70 @@ SWIG_AsVal_int (PyObject * obj, int *val) } +/* Getting isfinite working pre C99 across multiple platforms is non-trivial. Users can provide SWIG_isfinite on older platforms. */ +#ifndef SWIG_isfinite +/* isfinite() is a macro for C99 */ +# if defined(isfinite) +# define SWIG_isfinite(X) (isfinite(X)) +# elif defined __cplusplus && __cplusplus >= 201103L +/* Use a template so that this works whether isfinite() is std::isfinite() or + * in the global namespace. The reality seems to vary between compiler + * versions. + * + * Make sure namespace std exists to avoid compiler warnings. + * + * extern "C++" is required as this fragment can end up inside an extern "C" { } block + */ +namespace std { } +extern "C++" template<typename T> +inline int SWIG_isfinite_func(T x) { + using namespace std; + return isfinite(x); +} +# define SWIG_isfinite(X) (SWIG_isfinite_func(X)) +# elif defined(_MSC_VER) +# define SWIG_isfinite(X) (_finite(X)) +# elif defined(__sun) && defined(__SVR4) +# include <ieeefp.h> +# define SWIG_isfinite(X) (finite(X)) +# endif +#endif + + +/* Accept infinite as a valid float value unless we are unable to check if a value is finite */ +#ifdef SWIG_isfinite +# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX) && SWIG_isfinite(X)) +#else +# define SWIG_Float_Overflow_Check(X) ((X < -FLT_MAX || X > FLT_MAX)) +#endif + + +SWIGINTERN int +SWIG_AsVal_float (PyObject * obj, float *val) +{ + double v; + int res = SWIG_AsVal_double (obj, &v); + if (SWIG_IsOK(res)) { + if (SWIG_Float_Overflow_Check(v)) { + return SWIG_OverflowError; + } else { + if (val) *val = static_cast< float >(v); + } + } + return res; +} + + + #define SWIG_From_double PyFloat_FromDouble + + +SWIGINTERNINLINE PyObject * +SWIG_From_float (float value) +{ + return SWIG_From_double (value); +} + + PyObject * molfile_plugin_info(molfile_plugin_t** plugin_list, int plugin_no) { molfile_plugin_t *plugin; int *plugno = &plugin_no; @@ -3346,91 +3650,215 @@ PyObject * molfile_plugin_info(molfile_plugin_t** plugin_list, int plugin_no) { return tuple; } + +PyObject * my_open_file_read(molfile_plugin_t* plugin, char* fname, char* ftype, int natoms) { + if (PyType_Ready(&MolObjectType) < 0) + return NULL; + PyTypeObject *type = &MolObjectType; + /*plugin_handle = PyCapsule_New((void*)new MolObject(), "plugin", del_plugin); */ + /*MolObject* plugin_c = new MolObject;*/ + MolObject *plugin_c; + plugin_c = (MolObject *)type->tp_alloc(type, 0); + /*PyObject * plugin_c = MolObject_new(&MolObjectType, args, kwds);*/ + plugin_c->plugin = plugin; + plugin_c->file_handle = plugin->open_file_read(fname, ftype, &natoms); + plugin_c->natoms = natoms; + /* PyCapsule_SetPointer(plugin_handle, &plugin_c); */ + /* PyObject* plugin_handle = PyCapsule_New((void*)plugin_c, "plugin", del_plugin); */ + PyObject* plugin_handle = (PyObject *)plugin_c; + /*if(!plugin_handle) printf("Not assigned\n");*/ + /*PyObject *tuple = PyTuple_New(2); + PyTuple_SET_ITEM(tuple, 0, PyInt_FromLong((long)natoms)); + PyTuple_SET_ITEM(tuple, 1, plugin_handle);*/ + return plugin_handle; + } + + + + #ifdef __cplusplus extern "C" { #endif -SWIGINTERN PyObject *_wrap_molfile_plugin_list(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_MolAtoms_name_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - int arg1 ; - int val1 ; - int ecode1 = 0 ; + MolAtoms *arg1 = (MolAtoms *) 0 ; + char *arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + char temp2[16] ; + int res2 ; PyObject * obj0 = 0 ; - molfile_plugin_t **result = 0 ; + PyObject * obj1 = 0 ; - if (!PyArg_ParseTuple(args,(char *)"O:molfile_plugin_list",&obj0)) SWIG_fail; - ecode1 = SWIG_AsVal_int(obj0, &val1); - if (!SWIG_IsOK(ecode1)) { - SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "molfile_plugin_list" "', argument " "1"" of type '" "int""'"); - } - arg1 = static_cast< int >(val1); - result = (molfile_plugin_t **)molfile_plugin_list(arg1); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_p_molfile_plugin_t, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_name_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_name_set" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + res2 = SWIG_AsCharArray(obj1, temp2, 16); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_name_set" "', argument " "2"" of type '" "char [16]""'"); + } + arg2 = reinterpret_cast< char * >(temp2); + if (arg2) memcpy(arg1->name,arg2,16*sizeof(char)); + else memset(arg1->name,0,16*sizeof(char)); + resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_molfile_init(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_MolAtoms_name_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - int result; + MolAtoms *arg1 = (MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + char *result = 0 ; - if (!PyArg_ParseTuple(args,(char *)":molfile_init")) SWIG_fail; - result = (int)molfile_init(); - resultobj = SWIG_From_int(static_cast< int >(result)); + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_name_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_name_get" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + result = (char *)(char *) ((arg1)->name); + { + size_t size = SWIG_strnlen(result, 16); + + + + resultobj = SWIG_FromCharPtrAndSize(result, size); + } return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_molfile_finish(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_MolAtoms_type_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - int result; + MolAtoms *arg1 = (MolAtoms *) 0 ; + char *arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + char temp2[16] ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; - if (!PyArg_ParseTuple(args,(char *)":molfile_finish")) SWIG_fail; - result = (int)molfile_finish(); - resultobj = SWIG_From_int(static_cast< int >(result)); + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_type_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_type_set" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + res2 = SWIG_AsCharArray(obj1, temp2, 16); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_type_set" "', argument " "2"" of type '" "char [16]""'"); + } + arg2 = reinterpret_cast< char * >(temp2); + if (arg2) memcpy(arg1->type,arg2,16*sizeof(char)); + else memset(arg1->type,0,16*sizeof(char)); + resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_get_plugin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_MolAtoms_type_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - molfile_plugin_t **arg1 = (molfile_plugin_t **) 0 ; - int arg2 ; + MolAtoms *arg1 = (MolAtoms *) 0 ; void *argp1 = 0 ; int res1 = 0 ; - int val2 ; - int ecode2 = 0 ; + PyObject * obj0 = 0 ; + char *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_type_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_type_get" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + result = (char *)(char *) ((arg1)->type); + { + size_t size = SWIG_strnlen(result, 16); + + + + resultobj = SWIG_FromCharPtrAndSize(result, size); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_resname_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + char *arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + char temp2[8] ; + int res2 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - molfile_plugin_t *result = 0 ; - if (!PyArg_ParseTuple(args,(char *)"OO:get_plugin",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_p_molfile_plugin_t, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_resname_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_plugin" "', argument " "1"" of type '" "molfile_plugin_t **""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resname_set" "', argument " "1"" of type '" "MolAtoms *""'"); } - arg1 = reinterpret_cast< molfile_plugin_t ** >(argp1); - ecode2 = SWIG_AsVal_int(obj1, &val2); - if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_plugin" "', argument " "2"" of type '" "int""'"); - } - arg2 = static_cast< int >(val2); - result = (molfile_plugin_t *)get_plugin(arg1,arg2); - resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_molfile_plugin_t, 0 | 0 ); + arg1 = reinterpret_cast< MolAtoms * >(argp1); + res2 = SWIG_AsCharArray(obj1, temp2, 8); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_resname_set" "', argument " "2"" of type '" "char [8]""'"); + } + arg2 = reinterpret_cast< char * >(temp2); + if (arg2) memcpy(arg1->resname,arg2,8*sizeof(char)); + else memset(arg1->resname,0,8*sizeof(char)); + resultobj = SWIG_Py_Void(); return resultobj; fail: return NULL; } -SWIGINTERN PyObject *_wrap_molfile_plugin_info(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { +SWIGINTERN PyObject *_wrap_MolAtoms_resname_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { PyObject *resultobj = 0; - molfile_plugin_t **arg1 = (molfile_plugin_t **) 0 ; + MolAtoms *arg1 = (MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + char *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_resname_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resname_get" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + result = (char *)(char *) ((arg1)->resname); + { + size_t size = SWIG_strnlen(result, 8); + + + + resultobj = SWIG_FromCharPtrAndSize(result, size); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_resid_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; int arg2 ; void *argp1 = 0 ; int res1 = 0 ; @@ -3438,23 +3866,967 @@ SWIGINTERN PyObject *_wrap_molfile_plugin_info(PyObject *SWIGUNUSEDPARM(self), P int ecode2 = 0 ; PyObject * obj0 = 0 ; PyObject * obj1 = 0 ; - PyObject *result = 0 ; - if (!PyArg_ParseTuple(args,(char *)"OO:molfile_plugin_info",&obj0,&obj1)) SWIG_fail; - res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_p_molfile_plugin_t, 0 | 0 ); + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_resid_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); if (!SWIG_IsOK(res1)) { - SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "molfile_plugin_info" "', argument " "1"" of type '" "molfile_plugin_t **""'"); + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resid_set" "', argument " "1"" of type '" "MolAtoms *""'"); } - arg1 = reinterpret_cast< molfile_plugin_t ** >(argp1); + arg1 = reinterpret_cast< MolAtoms * >(argp1); ecode2 = SWIG_AsVal_int(obj1, &val2); if (!SWIG_IsOK(ecode2)) { - SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "molfile_plugin_info" "', argument " "2"" of type '" "int""'"); + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_resid_set" "', argument " "2"" of type '" "int""'"); } arg2 = static_cast< int >(val2); - { - result = (PyObject *)molfile_plugin_info(arg1,arg2); - if (PyErr_Occurred()) SWIG_fail; + if (arg1) (arg1)->resid = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_resid_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + int result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_resid_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_resid_get" "', argument " "1"" of type '" "MolAtoms *""'"); } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + result = (int) ((arg1)->resid); + resultobj = SWIG_From_int(static_cast< int >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_segid_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + char *arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + char temp2[8] ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_segid_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_segid_set" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + res2 = SWIG_AsCharArray(obj1, temp2, 8); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_segid_set" "', argument " "2"" of type '" "char [8]""'"); + } + arg2 = reinterpret_cast< char * >(temp2); + if (arg2) memcpy(arg1->segid,arg2,8*sizeof(char)); + else memset(arg1->segid,0,8*sizeof(char)); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_segid_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + char *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_segid_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_segid_get" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + result = (char *)(char *) ((arg1)->segid); + { + size_t size = SWIG_strnlen(result, 8); + + + + resultobj = SWIG_FromCharPtrAndSize(result, size); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_chain_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + char *arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + char temp2[2] ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_chain_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_chain_set" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + res2 = SWIG_AsCharArray(obj1, temp2, 2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_chain_set" "', argument " "2"" of type '" "char [2]""'"); + } + arg2 = reinterpret_cast< char * >(temp2); + if (arg2) memcpy(arg1->chain,arg2,2*sizeof(char)); + else memset(arg1->chain,0,2*sizeof(char)); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_chain_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + char *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_chain_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_chain_get" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + result = (char *)(char *) ((arg1)->chain); + { + size_t size = SWIG_strnlen(result, 2); + + + + resultobj = SWIG_FromCharPtrAndSize(result, size); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_altloc_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + char *arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + char temp2[2] ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_altloc_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_altloc_set" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + res2 = SWIG_AsCharArray(obj1, temp2, 2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_altloc_set" "', argument " "2"" of type '" "char [2]""'"); + } + arg2 = reinterpret_cast< char * >(temp2); + if (arg2) memcpy(arg1->altloc,arg2,2*sizeof(char)); + else memset(arg1->altloc,0,2*sizeof(char)); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_altloc_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + char *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_altloc_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_altloc_get" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + result = (char *)(char *) ((arg1)->altloc); + { + size_t size = SWIG_strnlen(result, 2); + + + + resultobj = SWIG_FromCharPtrAndSize(result, size); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_insertion_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + char *arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + char temp2[2] ; + int res2 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_insertion_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_insertion_set" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + res2 = SWIG_AsCharArray(obj1, temp2, 2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "MolAtoms_insertion_set" "', argument " "2"" of type '" "char [2]""'"); + } + arg2 = reinterpret_cast< char * >(temp2); + if (arg2) memcpy(arg1->insertion,arg2,2*sizeof(char)); + else memset(arg1->insertion,0,2*sizeof(char)); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_insertion_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + char *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_insertion_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_insertion_get" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + result = (char *)(char *) ((arg1)->insertion); + { + size_t size = SWIG_strnlen(result, 2); + + + + resultobj = SWIG_FromCharPtrAndSize(result, size); + } + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_occupancy_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + float arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_occupancy_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_occupancy_set" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_occupancy_set" "', argument " "2"" of type '" "float""'"); + } + arg2 = static_cast< float >(val2); + if (arg1) (arg1)->occupancy = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_occupancy_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_occupancy_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_occupancy_get" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + result = (float) ((arg1)->occupancy); + resultobj = SWIG_From_float(static_cast< float >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_bfactor_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + float arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_bfactor_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_bfactor_set" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_bfactor_set" "', argument " "2"" of type '" "float""'"); + } + arg2 = static_cast< float >(val2); + if (arg1) (arg1)->bfactor = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_bfactor_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_bfactor_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_bfactor_get" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + result = (float) ((arg1)->bfactor); + resultobj = SWIG_From_float(static_cast< float >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_mass_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + float arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_mass_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_mass_set" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_mass_set" "', argument " "2"" of type '" "float""'"); + } + arg2 = static_cast< float >(val2); + if (arg1) (arg1)->mass = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_mass_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_mass_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_mass_get" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + result = (float) ((arg1)->mass); + resultobj = SWIG_From_float(static_cast< float >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_charge_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + float arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_charge_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_charge_set" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_charge_set" "', argument " "2"" of type '" "float""'"); + } + arg2 = static_cast< float >(val2); + if (arg1) (arg1)->charge = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_charge_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_charge_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_charge_get" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + result = (float) ((arg1)->charge); + resultobj = SWIG_From_float(static_cast< float >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_radius_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + float arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_radius_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_radius_set" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_radius_set" "', argument " "2"" of type '" "float""'"); + } + arg2 = static_cast< float >(val2); + if (arg1) (arg1)->radius = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_radius_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_radius_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_radius_get" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + result = (float) ((arg1)->radius); + resultobj = SWIG_From_float(static_cast< float >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_atomicnumber_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + float arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_atomicnumber_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_atomicnumber_set" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_atomicnumber_set" "', argument " "2"" of type '" "float""'"); + } + arg2 = static_cast< float >(val2); + if (arg1) (arg1)->atomicnumber = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_atomicnumber_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_atomicnumber_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_atomicnumber_get" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + result = (float) ((arg1)->atomicnumber); + resultobj = SWIG_From_float(static_cast< float >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_ctnumber_set(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + float arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + float val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:MolAtoms_ctnumber_set",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_ctnumber_set" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + ecode2 = SWIG_AsVal_float(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "MolAtoms_ctnumber_set" "', argument " "2"" of type '" "float""'"); + } + arg2 = static_cast< float >(val2); + if (arg1) (arg1)->ctnumber = arg2; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_MolAtoms_ctnumber_get(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + float result; + + if (!PyArg_ParseTuple(args,(char *)"O:MolAtoms_ctnumber_get",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "MolAtoms_ctnumber_get" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + result = (float) ((arg1)->ctnumber); + resultobj = SWIG_From_float(static_cast< float >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_new_MolAtoms(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)":new_MolAtoms")) SWIG_fail; + result = (MolAtoms *)new MolAtoms(); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_MolAtoms, SWIG_POINTER_NEW | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_delete_MolAtoms(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + MolAtoms *arg1 = (MolAtoms *) 0 ; + void *argp1 = 0 ; + int res1 = 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:delete_MolAtoms",&obj0)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_MolAtoms, SWIG_POINTER_DISOWN | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "delete_MolAtoms" "', argument " "1"" of type '" "MolAtoms *""'"); + } + arg1 = reinterpret_cast< MolAtoms * >(argp1); + delete arg1; + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *MolAtoms_swigregister(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *obj; + if (!PyArg_ParseTuple(args,(char *)"O:swigregister", &obj)) return NULL; + SWIG_TypeNewClientData(SWIGTYPE_p_MolAtoms, SWIG_NewClientData(obj)); + return SWIG_Py_Void(); +} + +SWIGINTERN PyObject *_wrap_del_plugin_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + PyObject *arg1 = (PyObject *) 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:del_plugin_structure",&obj0)) SWIG_fail; + arg1 = obj0; + del_plugin_structure(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_alloc_plugin_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + PyObject *arg1 = (PyObject *) 0 ; + PyObject *arg2 = (PyObject *) 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:alloc_plugin_structure",&obj0,&obj1)) SWIG_fail; + arg1 = obj0; + arg2 = obj1; + result = (PyObject *)alloc_plugin_structure(arg1,arg2); + resultobj = result; + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_del_plugin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + PyObject *arg1 = (PyObject *) 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:del_plugin",&obj0)) SWIG_fail; + arg1 = obj0; + del_plugin(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_del_atoms(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + PyObject *arg1 = (PyObject *) 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:del_atoms",&obj0)) SWIG_fail; + arg1 = obj0; + del_atoms(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_del_atomname(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + PyObject *arg1 = (PyObject *) 0 ; + PyObject * obj0 = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:del_atomname",&obj0)) SWIG_fail; + arg1 = obj0; + del_atomname(arg1); + resultobj = SWIG_Py_Void(); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_alloc_plugin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + PyObject *arg1 = (PyObject *) 0 ; + PyObject *arg2 = (PyObject *) 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:alloc_plugin",&obj0,&obj1)) SWIG_fail; + arg1 = obj0; + arg2 = obj1; + result = (PyObject *)alloc_plugin(arg1,arg2); + resultobj = result; + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_molfile_plugin_list(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int arg1 ; + int val1 ; + int ecode1 = 0 ; + PyObject * obj0 = 0 ; + molfile_plugin_t **result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:molfile_plugin_list",&obj0)) SWIG_fail; + ecode1 = SWIG_AsVal_int(obj0, &val1); + if (!SWIG_IsOK(ecode1)) { + SWIG_exception_fail(SWIG_ArgError(ecode1), "in method '" "molfile_plugin_list" "', argument " "1"" of type '" "int""'"); + } + arg1 = static_cast< int >(val1); + result = (molfile_plugin_t **)molfile_plugin_list(arg1); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_p_molfile_plugin_t, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_molfile_init(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":molfile_init")) SWIG_fail; + result = (int)molfile_init(); + resultobj = SWIG_From_int(static_cast< int >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_molfile_finish(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + int result; + + if (!PyArg_ParseTuple(args,(char *)":molfile_finish")) SWIG_fail; + result = (int)molfile_finish(); + resultobj = SWIG_From_int(static_cast< int >(result)); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_get_plugin(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + molfile_plugin_t **arg1 = (molfile_plugin_t **) 0 ; + int arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + int val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + molfile_plugin_t *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:get_plugin",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_p_molfile_plugin_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "get_plugin" "', argument " "1"" of type '" "molfile_plugin_t **""'"); + } + arg1 = reinterpret_cast< molfile_plugin_t ** >(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "get_plugin" "', argument " "2"" of type '" "int""'"); + } + arg2 = static_cast< int >(val2); + result = (molfile_plugin_t *)get_plugin(arg1,arg2); + resultobj = SWIG_NewPointerObj(SWIG_as_voidptr(result), SWIGTYPE_p_molfile_plugin_t, 0 | 0 ); + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_molfile_plugin_info(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + molfile_plugin_t **arg1 = (molfile_plugin_t **) 0 ; + int arg2 ; + void *argp1 = 0 ; + int res1 = 0 ; + int val2 ; + int ecode2 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OO:molfile_plugin_info",&obj0,&obj1)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_p_molfile_plugin_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "molfile_plugin_info" "', argument " "1"" of type '" "molfile_plugin_t **""'"); + } + arg1 = reinterpret_cast< molfile_plugin_t ** >(argp1); + ecode2 = SWIG_AsVal_int(obj1, &val2); + if (!SWIG_IsOK(ecode2)) { + SWIG_exception_fail(SWIG_ArgError(ecode2), "in method '" "molfile_plugin_info" "', argument " "2"" of type '" "int""'"); + } + arg2 = static_cast< int >(val2); + { + result = (PyObject *)molfile_plugin_info(arg1,arg2); + if (PyErr_Occurred()) SWIG_fail; + } + resultobj = result; + return resultobj; +fail: + return NULL; +} + + +SWIGINTERN PyObject *_wrap_open_file_read(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + molfile_plugin_t *arg1 = (molfile_plugin_t *) 0 ; + char *arg2 = (char *) 0 ; + char *arg3 = (char *) 0 ; + int arg4 ; + void *argp1 = 0 ; + int res1 = 0 ; + int res2 ; + char *buf2 = 0 ; + int alloc2 = 0 ; + int res3 ; + char *buf3 = 0 ; + int alloc3 = 0 ; + int val4 ; + int ecode4 = 0 ; + PyObject * obj0 = 0 ; + PyObject * obj1 = 0 ; + PyObject * obj2 = 0 ; + PyObject * obj3 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"OOOO:open_file_read",&obj0,&obj1,&obj2,&obj3)) SWIG_fail; + res1 = SWIG_ConvertPtr(obj0, &argp1,SWIGTYPE_p_molfile_plugin_t, 0 | 0 ); + if (!SWIG_IsOK(res1)) { + SWIG_exception_fail(SWIG_ArgError(res1), "in method '" "open_file_read" "', argument " "1"" of type '" "molfile_plugin_t *""'"); + } + arg1 = reinterpret_cast< molfile_plugin_t * >(argp1); + res2 = SWIG_AsCharPtrAndSize(obj1, &buf2, NULL, &alloc2); + if (!SWIG_IsOK(res2)) { + SWIG_exception_fail(SWIG_ArgError(res2), "in method '" "open_file_read" "', argument " "2"" of type '" "char *""'"); + } + arg2 = reinterpret_cast< char * >(buf2); + res3 = SWIG_AsCharPtrAndSize(obj2, &buf3, NULL, &alloc3); + if (!SWIG_IsOK(res3)) { + SWIG_exception_fail(SWIG_ArgError(res3), "in method '" "open_file_read" "', argument " "3"" of type '" "char *""'"); + } + arg3 = reinterpret_cast< char * >(buf3); + ecode4 = SWIG_AsVal_int(obj3, &val4); + if (!SWIG_IsOK(ecode4)) { + SWIG_exception_fail(SWIG_ArgError(ecode4), "in method '" "open_file_read" "', argument " "4"" of type '" "int""'"); + } + arg4 = static_cast< int >(val4); + { + result = (PyObject *)my_open_file_read(arg1,arg2,arg3,arg4); + if (PyErr_Occurred()) SWIG_fail; + } + resultobj = result; + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + if (alloc3 == SWIG_NEWOBJ) delete[] buf3; + return resultobj; +fail: + if (alloc2 == SWIG_NEWOBJ) delete[] buf2; + if (alloc3 == SWIG_NEWOBJ) delete[] buf3; + return NULL; +} + + +SWIGINTERN PyObject *_wrap_read_structure(PyObject *SWIGUNUSEDPARM(self), PyObject *args) { + PyObject *resultobj = 0; + PyObject *arg1 = (PyObject *) 0 ; + PyObject * obj0 = 0 ; + PyObject *result = 0 ; + + if (!PyArg_ParseTuple(args,(char *)"O:read_structure",&obj0)) SWIG_fail; + arg1 = obj0; + result = (PyObject *)my_read_structure(arg1); resultobj = result; return resultobj; fail: @@ -3464,32 +4836,77 @@ fail: static PyMethodDef SwigMethods[] = { { (char *)"SWIG_PyInstanceMethod_New", (PyCFunction)SWIG_PyInstanceMethod_New, METH_O, NULL}, + { (char *)"MolAtoms_name_set", _wrap_MolAtoms_name_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_name_get", _wrap_MolAtoms_name_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_type_set", _wrap_MolAtoms_type_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_type_get", _wrap_MolAtoms_type_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_resname_set", _wrap_MolAtoms_resname_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_resname_get", _wrap_MolAtoms_resname_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_resid_set", _wrap_MolAtoms_resid_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_resid_get", _wrap_MolAtoms_resid_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_segid_set", _wrap_MolAtoms_segid_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_segid_get", _wrap_MolAtoms_segid_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_chain_set", _wrap_MolAtoms_chain_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_chain_get", _wrap_MolAtoms_chain_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_altloc_set", _wrap_MolAtoms_altloc_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_altloc_get", _wrap_MolAtoms_altloc_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_insertion_set", _wrap_MolAtoms_insertion_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_insertion_get", _wrap_MolAtoms_insertion_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_occupancy_set", _wrap_MolAtoms_occupancy_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_occupancy_get", _wrap_MolAtoms_occupancy_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_bfactor_set", _wrap_MolAtoms_bfactor_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_bfactor_get", _wrap_MolAtoms_bfactor_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_mass_set", _wrap_MolAtoms_mass_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_mass_get", _wrap_MolAtoms_mass_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_charge_set", _wrap_MolAtoms_charge_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_charge_get", _wrap_MolAtoms_charge_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_radius_set", _wrap_MolAtoms_radius_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_radius_get", _wrap_MolAtoms_radius_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_atomicnumber_set", _wrap_MolAtoms_atomicnumber_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_atomicnumber_get", _wrap_MolAtoms_atomicnumber_get, METH_VARARGS, NULL}, + { (char *)"MolAtoms_ctnumber_set", _wrap_MolAtoms_ctnumber_set, METH_VARARGS, NULL}, + { (char *)"MolAtoms_ctnumber_get", _wrap_MolAtoms_ctnumber_get, METH_VARARGS, NULL}, + { (char *)"new_MolAtoms", _wrap_new_MolAtoms, METH_VARARGS, NULL}, + { (char *)"delete_MolAtoms", _wrap_delete_MolAtoms, METH_VARARGS, NULL}, + { (char *)"MolAtoms_swigregister", MolAtoms_swigregister, METH_VARARGS, NULL}, + { (char *)"del_plugin_structure", _wrap_del_plugin_structure, METH_VARARGS, NULL}, + { (char *)"alloc_plugin_structure", _wrap_alloc_plugin_structure, METH_VARARGS, NULL}, + { (char *)"del_plugin", _wrap_del_plugin, METH_VARARGS, NULL}, + { (char *)"del_atoms", _wrap_del_atoms, METH_VARARGS, NULL}, + { (char *)"del_atomname", _wrap_del_atomname, METH_VARARGS, NULL}, + { (char *)"alloc_plugin", _wrap_alloc_plugin, METH_VARARGS, NULL}, { (char *)"molfile_plugin_list", _wrap_molfile_plugin_list, METH_VARARGS, (char *)"molfile_plugin_list(maxsize) -> molfile_plugin_t **"}, { (char *)"molfile_init", _wrap_molfile_init, METH_VARARGS, (char *)"molfile_init() -> int"}, { (char *)"molfile_finish", _wrap_molfile_finish, METH_VARARGS, (char *)"molfile_finish() -> int"}, { (char *)"get_plugin", _wrap_get_plugin, METH_VARARGS, (char *)"get_plugin(plugin_list, plugin_no) -> molfile_plugin_t *"}, { (char *)"molfile_plugin_info", _wrap_molfile_plugin_info, METH_VARARGS, (char *)"molfile_plugin_info(plugin_list, plugin_no) -> PyObject *"}, + { (char *)"open_file_read", _wrap_open_file_read, METH_VARARGS, (char *)"open_file_read(plugin, fname, ftype, natoms) -> PyObject *"}, + { (char *)"read_structure", _wrap_read_structure, METH_VARARGS, (char *)"read_structure(molpack) -> PyObject *"}, { NULL, NULL, 0, NULL } }; /* -------- TYPE CONVERSION AND EQUIVALENCE RULES (BEGIN) -------- */ +static swig_type_info _swigt__p_MolAtoms = {"_p_MolAtoms", "MolAtoms *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_char = {"_p_char", "char *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_molfile_plugin_t = {"_p_molfile_plugin_t", "molfile_plugin_t *", 0, 0, (void*)0, 0}; static swig_type_info _swigt__p_p_molfile_plugin_t = {"_p_p_molfile_plugin_t", "molfile_plugin_t **", 0, 0, (void*)0, 0}; static swig_type_info *swig_type_initial[] = { + &_swigt__p_MolAtoms, &_swigt__p_char, &_swigt__p_molfile_plugin_t, &_swigt__p_p_molfile_plugin_t, }; +static swig_cast_info _swigc__p_MolAtoms[] = { {&_swigt__p_MolAtoms, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_char[] = { {&_swigt__p_char, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_molfile_plugin_t[] = { {&_swigt__p_molfile_plugin_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info _swigc__p_p_molfile_plugin_t[] = { {&_swigt__p_p_molfile_plugin_t, 0, 0, 0},{0, 0, 0, 0}}; static swig_cast_info *swig_cast_initial[] = { + _swigc__p_MolAtoms, _swigc__p_char, _swigc__p_molfile_plugin_t, _swigc__p_p_molfile_plugin_t, @@ -4184,6 +5601,7 @@ SWIG_init(void) { SWIG_InstallConstants(d,swig_const_table); + Py_Initialize(); import_array(); SWIG_Python_SetConstant(d, "pluginOK",SWIG_From_int(static_cast< int >(pluginOK))); diff --git a/pymolfile/molfile/pymolfile.c b/pymolfile/molfile/pymolfile.c index 5bae356ea6afb0e04d4b0c691d94da62c3ab41c6..b3033e97440a13dc50ef4c006f9ebb4ecdb35fe4 100644 --- a/pymolfile/molfile/pymolfile.c +++ b/pymolfile/molfile/pymolfile.c @@ -36,6 +36,9 @@ int numplugins=0; molfile_plugin_t** plugin_list; + + + /* * * * * * * * * * * * * * * * * * * * * * * * Helper functions to set and store plugins * * * * * * * * * * * * * * * * * * * * * * * */ @@ -58,11 +61,13 @@ struct DICTHOLDER * plugin_find(struct DICTHOLDER *dict, const char *pluginname) molfile_plugin_t* get_plugin(molfile_plugin_t** plug_list, int plug_no) { + molfile_plugin_t* plugin; if(plug_no < 0){ - return NULL; + plugin = NULL; } else { - return plug_list[plug_no]; + plugin = plug_list[plug_no]; } + return plugin; } #if 0 @@ -245,4 +250,55 @@ int molfile_finish(void) /* Functions in molfile_plugin_t */ +PyObject * my_read_structure(PyObject* molpack) { + Py_Initialize(); + import_array(); + + int options = 0; + int i; + molfile_plugin_t* plugin; + void* file_handle; + molfile_atom_t* atoms; + int numatoms, status; + PyArray_Descr *descr; + PyObject p*; + if (PyType_Ready(&MolAtomType) < 0) + return NULL; + PyTypeObject *atype = &MolAtomType; + MolAtom *atom_t; + atom_t = (MolAtom *)atype->tp_alloc(atype, 0); + p = (PyObject*) atom_t; + descr = PyArray_DescrFromObject(p, NULL) + MolObject* plugin_handle = (MolObject*) molpack; + plugin = plugin_handle->plugin; + file_handle = plugin_handle->file_handle; + numatoms = plugin_handle->natoms; + atoms = (molfile_atom_t *)calloc(numatoms,sizeof(molfile_atom_t)); + status = plugin->read_structure(file_handle, &options, atoms); + if (status!=0){ + PyErr_Format(PyExc_IOError, "Error accessing molfile_atom_t in read_structure function of plugin."); + return NULL; + } + PyArrayObject* oresid; + PyObject* array; + int64_t* cresid; + int nd = 1; + npy_intp dims[1] = { numatoms }; + oresid = (PyArrayObject*) PyArray_SimpleNew(nd, dims, NPY_INT64); + Py_DECREF(p); + array = (PyArrayObject*) PyArray_SimpleNewFromDescr(1, dims, descr); + PyObject_Print(array, stdout, 0); + if (!oresid){ + PyErr_Format(PyExc_IOError, "Error copying molfile_atom_t into numpy array."); + return NULL; + } + npy_intp* n = PyArray_DIMS(oresid); + cresid = (int64_t*) PyArray_DATA(oresid); + +// for (i=0;i<numatoms;i++){ +// cresid[i] = (int64_t) atoms[i].resid; +// } + return (PyObject*) PyArray_FromArray(oresid, PyArray_DESCR(oresid), 0); +} + diff --git a/pymolfile/molfile/pymolfile.h b/pymolfile/molfile/pymolfile.h index e71a911f5bfbd883fa9506462e9d3214526572c9..5d37f5d2dc12ed010c2baa45c4edb26cbe77ae75 100644 --- a/pymolfile/molfile/pymolfile.h +++ b/pymolfile/molfile/pymolfile.h @@ -25,6 +25,10 @@ extern "C" #include "molfile_plugin.h" #include "libmolfile_plugin.h" #include "vmdplugin.h" +#include "Python.h" +#include "structmember.h" +#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION +#include <numpy/arrayobject.h> enum { pluginOK, pluginNOINIT, pluginCLOSE, pluginNOMEM, pluginENDOFFILE, pluginFILENOTFOUND, pluginFORMATERROR }; @@ -33,6 +37,281 @@ enum { pluginOK, pluginNOINIT, pluginCLOSE, pluginNOMEM, #define MAXPLUGINS 200 #endif +struct MolObject { + PyObject_HEAD + molfile_plugin_t* plugin; + void* file_handle; + int natoms; + MolObject(void) {} +}; + +static void MolObject_dealloc(MolObject* self) +{ + Py_XDECREF(self->plugin); + Py_XDECREF(self->file_handle); + Py_TYPE(self)->tp_free((PyObject*)self); +} + +static PyObject * MolObject_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + MolObject *self; + + self = (MolObject *)type->tp_alloc(type, 0); + if (self != NULL) { + self->plugin = NULL; + self->file_handle = NULL; + self->natoms = 0; + } + + return (PyObject *)self; +} + +static int MolObject_init(MolObject *self, PyObject *args, PyObject *kwds) +{ + molfile_plugin_t *plugin = NULL; + void *file_handle = NULL; + molfile_plugin_t *tmp1 = NULL; + void *tmp2 = NULL; + + static char *kwlist[] = {"plugin", "file_handle", "natoms", NULL}; + + if (! PyArg_ParseTupleAndKeywords(args, kwds, "|OOi", kwlist, + &plugin, &file_handle, + &self->natoms)) + return -1; + + if (plugin) { + tmp1 = self->plugin; + Py_INCREF(plugin); + self->plugin = plugin; + Py_XDECREF(tmp1); + } + + if (file_handle) { + tmp2 = self->file_handle; + Py_INCREF(file_handle); + self->file_handle = file_handle; + Py_XDECREF(tmp2); + } + + return 0; +} + +static molfile_plugin_t* MolObject_plugin(MolObject* self) +{ + return self->plugin; +} + +static void* MolObject_file_handle(MolObject* self) +{ + return self->file_handle; +} + +static PyObject* MolObject_natoms(MolObject* self) +{ + return PyLong_FromLong((long)self->natoms); +} + +static PyMemberDef MolObject_members[] = { + {"plugin", T_OBJECT_EX, offsetof(MolObject, plugin), 0, + "molfile_plugin_t type plugin"}, + {"file_handle", T_OBJECT_EX, offsetof(MolObject, file_handle), 0, + "file handle for plugin"}, + {"natoms", T_INT, offsetof(MolObject, natoms), 0, + "number of atoms"}, + {NULL, NULL, 0, NULL} /* Sentinel */ +}; + +static PyMethodDef MolObject_methods[] = { + {"get_plugin", (PyCFunction)MolObject_plugin, METH_NOARGS, + "Return the plugin" + }, + {"get_file_handle", (PyCFunction)MolObject_file_handle, METH_NOARGS, + "Return the plugin" + }, + {"get_natoms", (PyCFunction)MolObject_natoms, METH_NOARGS, + "Return the number of atoms" + }, + {NULL, NULL, 0, NULL} /* Sentinel */ +}; + + +#ifndef PyVarObject_HEAD_INIT + #define PyVarObject_HEAD_INIT(type, size) \ + PyObject_HEAD_INIT(type) size, +#endif + +static PyTypeObject MolObjectType = { + PyVarObject_HEAD_INIT(NULL, 0) + "molobject", /*tp_name*/ + sizeof(MolObject), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + (destructor)MolObject_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT | + Py_TPFLAGS_BASETYPE, /* tp_flags */ + "molobject objects", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + MolObject_methods, /* tp_methods */ + MolObject_members, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + (initproc)MolObject_init, /* tp_init */ + 0, /* tp_alloc */ + MolObject_new, /* tp_new */ +}; + +struct MolAtom { + PyObject_HEAD + char* name; + char* type; + char* resname; + int* resid; + char* segid; + char* chain; + char* altloc; + char* insertion; + float* occupancy; + float* bfactor; + float* mass; + float* charge; + float* radius; + float* atomicnumber; + float* ctnumber; + MolAtom(void) {} +}; + +static void MolAtom_dealloc(MolAtom* self) +{ + Py_XDECREF(self->name); + Py_XDECREF(self->type); + Py_XDECREF(self->resname); + Py_XDECREF(self->resid); + Py_XDECREF(self->segid); + Py_XDECREF(self->chain); + Py_XDECREF(self->altloc); + Py_XDECREF(self->insertion); + Py_XDECREF(self->occupancy); + Py_XDECREF(self->bfactor); + Py_XDECREF(self->mass); + Py_XDECREF(self->charge); + Py_XDECREF(self->radius); + Py_XDECREF(self->atomicnumber); + Py_XDECREF(self->ctnumber); + Py_TYPE(self)->tp_free((PyObject*)self); +} + +static PyObject * MolAtom_new(PyTypeObject *type, PyObject *args, PyObject *kwds) +{ + MolAtom *self; + + self = (MolAtom *)type->tp_alloc(type, 0); + if (self != NULL) { + self->name = NULL; + self->type = NULL; + self->resname = NULL; + self->resid = NULL; + self->segid = NULL; + self->chain = NULL; + self->altloc = NULL; + self->insertion = NULL; + self->occupancy = NULL; + self->bfactor = NULL; + self->mass = NULL; + self->charge = NULL; + self->radius = NULL; + self->atomicnumber = NULL; + self->ctnumber = NULL; + } + + return (PyObject *)self; +} + +static PyMemberDef MolAtom_members[] = { + {"name", T_STRING, offsetof(MolAtom, name), 0,""}, + {"type", T_STRING, offsetof(MolAtom, type), 0,""}, + {"resname", T_STRING, offsetof(MolAtom, resname), 0,""}, + {"resid", T_INT, offsetof(MolAtom, resid), 0,""}, + {"segid", T_STRING, offsetof(MolAtom, segid), 0,""}, + {"chain", T_STRING, offsetof(MolAtom, chain), 0,""}, + {"altloc", T_STRING, offsetof(MolAtom, altloc), 0,""}, + {"insertion", T_STRING, offsetof(MolAtom, occupancy), 0,""}, + {"occupancy", T_FLOAT, offsetof(MolAtom, ), 0,""}, + {"bfactor", T_FLOAT, offsetof(MolAtom, bfactor), 0,""}, + {"mass", T_FLOAT, offsetof(MolAtom, mass), 0,""}, + {"charge", T_FLOAT, offsetof(MolAtom, charge), 0,""}, + {"radius", T_FLOAT, offsetof(MolAtom, radius), 0,""}, + {"atomicnumber", T_INT, offsetof(MolAtom, atomicnumber), 0,""}, + {"ctnumber", T_INT, offsetof(MolAtom, ctnumber), 0,""}, + {NULL, NULL, 0, NULL} /* Sentinel */ +}; + +static PyTypeObject MolAtomType = { + PyVarObject_HEAD_INIT(NULL, 0) + "molobject", /*tp_name*/ + sizeof(MolAtom), /*tp_basicsize*/ + 0, /*tp_itemsize*/ + (destructor)MolAtom_dealloc, /*tp_dealloc*/ + 0, /*tp_print*/ + 0, /*tp_getattr*/ + 0, /*tp_setattr*/ + 0, /*tp_reserved*/ + 0, /*tp_repr*/ + 0, /*tp_as_number*/ + 0, /*tp_as_sequence*/ + 0, /*tp_as_mapping*/ + 0, /*tp_hash */ + 0, /*tp_call*/ + 0, /*tp_str*/ + 0, /*tp_getattro*/ + 0, /*tp_setattro*/ + 0, /*tp_as_buffer*/ + Py_TPFLAGS_DEFAULT | + Py_TPFLAGS_BASETYPE, /* tp_flags */ + "molatom objects", /* tp_doc */ + 0, /* tp_traverse */ + 0, /* tp_clear */ + 0, /* tp_richcompare */ + 0, /* tp_weaklistoffset */ + 0, /* tp_iter */ + 0, /* tp_iternext */ + 0, /* tp_methods */ + MolAtom_members, /* tp_members */ + 0, /* tp_getset */ + 0, /* tp_base */ + 0, /* tp_dict */ + 0, /* tp_descr_get */ + 0, /* tp_descr_set */ + 0, /* tp_dictoffset */ + 0, /* tp_init */ + 0, /* tp_alloc */ + MolAtom_new, /* tp_new */ +}; + +PyObject * my_read_structure(PyObject* molpack); + #if 0 typedef struct DICTHOLDER { const char *key; // Dictionary key @@ -55,6 +334,7 @@ static int has_writesupport(const char *pluginname); static molfile_plugin_t *get_plugin(const char *pluginname); static int molfile_register(void *ptr, vmdplugin_t *plugin); + #endif molfile_plugin_t* get_plugin(molfile_plugin_t** plug_list, int plug_no); diff --git a/pymolfile/molfile/test.py b/pymolfile/molfile/test.py index 52af65aa65d193c83db4989ec9c3b312189066f1..afca74ed4fb9117e100c586e16cbb94e359dd340 100644 --- a/pymolfile/molfile/test.py +++ b/pymolfile/molfile/test.py @@ -1,6 +1,128 @@ import numpy +import ctypes import _libpymolfile +class molatom_t(ctypes.Structure): + _fields_ = [ + ('name', ctypes.c_char * 16), + ('type', ctypes.c_char * 16), + ('resname', ctypes.c_char * 8), + ('resid', ctypes.c_uint8), + ('segid', ctypes.c_char * 8), + ('chain', ctypes.c_char * 2), + ('altloc', ctypes.c_char * 2), + ('insertion', ctypes.c_char *2), + ('occupancy', ctypes.c_float), + ('bfactor', ctypes.c_float), + ('mass', ctypes.c_float), + ('charge', ctypes.c_float), + ('radius', ctypes.c_float), + ('atomicnumber', ctypes.c_uint8), + ('ctnumber', ctypes.c_uint8), + ] + +class molplugin_t(ctypes.Structure): + _fields_ = [ + ('abiversion', ctypes.c_uint8), + ('type', ctypes.c_char_p), + ('name', ctypes.c_char_p), + ('prettyname', ctypes.c_char_p), + ('author', ctypes.c_char_p), + ('majorv', ctypes.c_uint8), + ('minorv', ctypes.c_uint8), + ('is_reentrant', ctypes.c_uint8), + ('filename_extension', ctypes.c_char_p), + ('open_file_read', ctypes.CFUNCTYPE(ctypes.c_char_p, + ctypes.c_char_p, ctypes.POINTER(ctypes.c_uint8))), + ('read_structure', ctypes.CFUNCTYPE(ctypes.c_void_p, + ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(molatom_t))), + ('read_bonds', ctypes.CFUNCTYPE(ctypes.c_void_p, + ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(ctypes.c_uint), + ctypes.POINTER(ctypes.c_float), ctypes.POINTER(ctypes.c_uint), ctypes.POINTER(ctypes.c_uint), + ctypes.c_char_p)), + ('read_next_timestep', ctypes.c_int8), + ('close_file_read', ctypes.c_void_p), + ('open_file_write', ctypes.c_void_p), + ('write_structure', ctypes.c_int8), + ('write_timestep', ctypes.c_int8), + ('close_file_write', ctypes.c_void_p), + ('read_volumetric_metadata', ctypes.c_int8), + ('read_volumetric_data', ctypes.c_int8), + ('read_volumetric_data_ex', ctypes.c_int8), + ('read_rawgraphics', ctypes.c_int8), + ('read_molecule_metadata', ctypes.c_int8), + ('write_bonds', ctypes.c_int8), + ('write_volumetric_data', ctypes.c_int8), + ('write_volumetric_data_ex', ctypes.c_int8), + ('read_angles', ctypes.c_int8), + ('write_angles', ctypes.c_int8), + ('read_qm_metadata', ctypes.c_int8), + ('read_qm_rundata', ctypes.c_int8), + ('read_timestep', ctypes.c_int8), + ('read_timestep_metadata', ctypes.c_int8), + ('read_qm_timestep_metadata', ctypes.c_int8), + ('read_timestep2', ctypes.c_int8), + ('read_times', ctypes.c_ssize_t), + ('cons_fputs', ctypes.c_uint8) + ] + +class moltimestep_t(ctypes.Structure): + _fields_ = [ + ('coords', ctypes.POINTER(ctypes.c_float)), + ('velocities', ctypes.POINTER(ctypes.c_float)), + ('A', ctypes.c_float), + ('B', ctypes.c_float), + ('C', ctypes.c_float), + ('alpha', ctypes.c_float), + ('beta', ctypes.c_float), + ('gamma', ctypes.c_float), + ('physical_time', ctypes.c_double), + ('total_energy', ctypes.c_double), + ('potential_energy', ctypes.c_double), + ('kinetic_energy', ctypes.c_double), + ('extended_energy', ctypes.c_double), + ('force_energy', ctypes.c_double), + ('total_pressure', ctypes.c_double) + ] + +class molhandle_t(ctypes.Structure): + _fields_ = [ + ('plugin', ctypes.POINTER(molplugin_t)), + ('file_handle', ctypes.c_void_p), + ('natoms', ctypes.c_int) + ] + +class molnatoms(ctypes.Structure): + _fields_ = [ + ('natoms', ctypes.c_int) + ] + +#callback_t = ctypes.CFUNCTYPE(None, ctypes.POINTER(molatom_t)) + +def get_open_file_read(output): + ctypes.open_file_read.restype = ctypes.POINTER(molhandle_t) + ctypes.open_file_read.argtypes = [ctypes.POINTER(molplugin_t), ctypes.c_void_p, ctypes.c_uint8] + return ctypes.pythonapi.PyCapsule_GetPointer(output, "plugin") + +def get_capsule(capsule): + ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.c_void_p + ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object, ctypes.c_char_p] + return ctypes.pythonapi.PyCapsule_GetPointer(capsule, b"plugin") + +def get_plugincapsule(capsule): + data = ctypes.POINTER(molhandle_t) + ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.POINTER(molhandle_t) + ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object, ctypes.c_char_p] + data = ctypes.pythonapi.PyCapsule_GetPointer(capsule, b"plugin") + return data + +def get_plugindata(capsule): + data = ctypes.POINTER(molhandle_t) + ctypes.pythonapi.PyCapsule_GetPointer.restype = ctypes.POINTER(molhandle_t) + ctypes.pythonapi.PyCapsule_GetPointer.argtypes = [ctypes.py_object, ctypes.c_char_p] + data = ctypes.pythonapi.PyCapsule_GetPointer(capsule, b"plugin") + return data + mylib = _libpymolfile mylist = mylib.molfile_plugin_list(200) numlist = mylib.molfile_init() @@ -9,4 +131,23 @@ for i in range(numlist): testplugin = mylib.molfile_plugin_info(mylist, i) print(i, testplugin) +plugin = mylib.get_plugin(mylist, 81) +print(plugin) +natoms=0 +numatoms=molnatoms(natoms) +fname="../../test/md.gro" +ftype="gro" + +pluginhandle = mylib.open_file_read(plugin, fname, ftype, natoms) +print("This passed") +print(pluginhandle) +print("This passed too") +print(pluginhandle.natoms) +print("Here") +outarray = mylib.read_structure(pluginhandle) +print(outarray) +#print(type(outarray)) +#for i in outarray: +# print(i) +