// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
// RUN: c_compiler -c -o %t1.o -I "common" "common/testsuite.c"
// RUN: cxx_compiler cxx_rtti -c %s -I "common" -o %t2.o
// RUN: c_compiler -c %s -I "common" -o %t3.o
// RUN: linker -o %t2%exeext  %t1.o %t2.o %t3.o
// RUN: runtool %t2%exeext | checker "TEST PASSED"
#include "testsuite.h"
#ifdef __cplusplus

struct  S8663C2  {
  virtual  ~S8663C2(); // _ZN7S8663C2D1Ev
  virtual void  v187(); // _ZN7S8663C24v187Ev
  virtual void  v188(); // _ZN7S8663C24v188Ev
  virtual void  v189(); // _ZN7S8663C24v189Ev
  virtual void  v190(); // _ZN7S8663C24v190Ev
  virtual void  v191(); // _ZN7S8663C24v191Ev
  virtual void  v192(); // _ZN7S8663C24v192Ev
  virtual void  v193(); // _ZN7S8663C24v193Ev
  virtual void  v194(); // _ZN7S8663C24v194Ev
  virtual void  v195(); // _ZN7S8663C24v195Ev
  virtual void  v196(); // _ZN7S8663C24v196Ev
  virtual void  v197(); // _ZN7S8663C24v197Ev
  virtual void  v198(); // _ZN7S8663C24v198Ev
  virtual void  v199(); // _ZN7S8663C24v199Ev
  virtual void  v200(); // _ZN7S8663C24v200Ev
  virtual void  v201(); // _ZN7S8663C24v201Ev
  virtual void  v202(); // _ZN7S8663C24v202Ev
  virtual void  v203(); // _ZN7S8663C24v203Ev
  virtual void  v204(); // _ZN7S8663C24v204Ev
  virtual void  v205(); // _ZN7S8663C24v205Ev
  virtual void  v206(); // _ZN7S8663C24v206Ev
  virtual void  v207(); // _ZN7S8663C24v207Ev
  virtual void  v208(); // _ZN7S8663C24v208Ev
  virtual void  v209(); // _ZN7S8663C24v209Ev
  virtual void  v210(); // _ZN7S8663C24v210Ev
  virtual void  v211(); // _ZN7S8663C24v211Ev
  virtual void  v212(); // _ZN7S8663C24v212Ev
  virtual void  v213(); // _ZN7S8663C24v213Ev
  virtual void  v214(); // _ZN7S8663C24v214Ev
  virtual void  v215(); // _ZN7S8663C24v215Ev
  virtual void  v216(); // _ZN7S8663C24v216Ev
  virtual void  v217(); // _ZN7S8663C24v217Ev
  virtual void  v218(); // _ZN7S8663C24v218Ev
  virtual void  v219(); // _ZN7S8663C24v219Ev
  virtual void  v220(); // _ZN7S8663C24v220Ev
  virtual void  v221(); // _ZN7S8663C24v221Ev
  virtual void  v222(); // _ZN7S8663C24v222Ev
  virtual void  v223(); // _ZN7S8663C24v223Ev
  virtual void  v224(); // _ZN7S8663C24v224Ev
  virtual void  v225(); // _ZN7S8663C24v225Ev
  virtual void  v226(); // _ZN7S8663C24v226Ev
  virtual void  v227(); // _ZN7S8663C24v227Ev
  virtual void  v228(); // _ZN7S8663C24v228Ev
  virtual void  v229(); // _ZN7S8663C24v229Ev
  virtual void  v230(); // _ZN7S8663C24v230Ev
  virtual void  v231(); // _ZN7S8663C24v231Ev
  virtual void  v232(); // _ZN7S8663C24v232Ev
  virtual void  v233(); // _ZN7S8663C24v233Ev
  virtual void  v234(); // _ZN7S8663C24v234Ev
  virtual void  v235(); // _ZN7S8663C24v235Ev
  virtual void  v236(); // _ZN7S8663C24v236Ev
  virtual void  v237(); // _ZN7S8663C24v237Ev
  virtual void  v238(); // _ZN7S8663C24v238Ev
  virtual void  v239(); // _ZN7S8663C24v239Ev
  virtual void  v240(); // _ZN7S8663C24v240Ev
  virtual void  v241(); // _ZN7S8663C24v241Ev
  virtual void  v242(); // _ZN7S8663C24v242Ev
  virtual void  v243(); // _ZN7S8663C24v243Ev
  virtual void  v244(); // _ZN7S8663C24v244Ev
  virtual void  v245(); // _ZN7S8663C24v245Ev
  virtual void  v246(); // _ZN7S8663C24v246Ev
  virtual void  v247(); // _ZN7S8663C24v247Ev
  virtual void  v248(); // _ZN7S8663C24v248Ev
  virtual void  v249(); // _ZN7S8663C24v249Ev
  virtual void  v250(); // _ZN7S8663C24v250Ev
  virtual void  v251(); // _ZN7S8663C24v251Ev
  virtual void  v252(); // _ZN7S8663C24v252Ev
  virtual void  v253(); // _ZN7S8663C24v253Ev
  virtual void  v254(); // _ZN7S8663C24v254Ev
  virtual void  v255(); // _ZN7S8663C24v255Ev
  virtual void  v256(); // _ZN7S8663C24v256Ev
  virtual void  v257(); // _ZN7S8663C24v257Ev
  virtual void  v258(); // _ZN7S8663C24v258Ev
  virtual void  v259(); // _ZN7S8663C24v259Ev
  virtual void  v260(); // _ZN7S8663C24v260Ev
  virtual void  v261(); // _ZN7S8663C24v261Ev
  virtual void  v262(); // _ZN7S8663C24v262Ev
  virtual void  v263(); // _ZN7S8663C24v263Ev
  virtual void  v264(); // _ZN7S8663C24v264Ev
  virtual void  v265(); // _ZN7S8663C24v265Ev
  virtual void  v266(); // _ZN7S8663C24v266Ev
  virtual void  v267(); // _ZN7S8663C24v267Ev
  virtual void  v268(); // _ZN7S8663C24v268Ev
  virtual void  v269(); // _ZN7S8663C24v269Ev
  virtual void  v270(); // _ZN7S8663C24v270Ev
  virtual void  v271(); // _ZN7S8663C24v271Ev
  virtual void  v272(); // _ZN7S8663C24v272Ev
  virtual void  v273(); // _ZN7S8663C24v273Ev
  virtual void  v274(); // _ZN7S8663C24v274Ev
  virtual void  v275(); // _ZN7S8663C24v275Ev
  virtual void  v276(); // _ZN7S8663C24v276Ev
  virtual void  v277(); // _ZN7S8663C24v277Ev
  virtual void  v278(); // _ZN7S8663C24v278Ev
  virtual void  v279(); // _ZN7S8663C24v279Ev
  virtual void  v280(); // _ZN7S8663C24v280Ev
  virtual void  v281(); // _ZN7S8663C24v281Ev
  virtual void  v282(); // _ZN7S8663C24v282Ev
  virtual void  v283(); // _ZN7S8663C24v283Ev
  virtual void  v284(); // _ZN7S8663C24v284Ev
  virtual void  v285(); // _ZN7S8663C24v285Ev
  virtual void  v286(); // _ZN7S8663C24v286Ev
  virtual void  v287(); // _ZN7S8663C24v287Ev
  virtual void  v288(); // _ZN7S8663C24v288Ev
  virtual void  v289(); // _ZN7S8663C24v289Ev
  virtual void  v290(); // _ZN7S8663C24v290Ev
  virtual void  v291(); // _ZN7S8663C24v291Ev
  virtual void  v292(); // _ZN7S8663C24v292Ev
  virtual void  v293(); // _ZN7S8663C24v293Ev
  virtual void  v294(); // _ZN7S8663C24v294Ev
  virtual void  v295(); // _ZN7S8663C24v295Ev
  virtual void  v296(); // _ZN7S8663C24v296Ev
  virtual void  v297(); // _ZN7S8663C24v297Ev
  virtual void  v298(); // _ZN7S8663C24v298Ev
  virtual void  v299(); // _ZN7S8663C24v299Ev
  virtual void  v300(); // _ZN7S8663C24v300Ev
  virtual void  v301(); // _ZN7S8663C24v301Ev
  virtual void  v302(); // _ZN7S8663C24v302Ev
  virtual void  v303(); // _ZN7S8663C24v303Ev
  virtual void  v304(); // _ZN7S8663C24v304Ev
  virtual void  v305(); // _ZN7S8663C24v305Ev
  virtual void  v306(); // _ZN7S8663C24v306Ev
  virtual void  v307(); // _ZN7S8663C24v307Ev
  virtual void  v308(); // _ZN7S8663C24v308Ev
  virtual void  v309(); // _ZN7S8663C24v309Ev
  virtual void  v310(); // _ZN7S8663C24v310Ev
  virtual void  v311(); // _ZN7S8663C24v311Ev
  virtual void  v312(); // _ZN7S8663C24v312Ev
  virtual void  v313(); // _ZN7S8663C24v313Ev
  virtual void  v314(); // _ZN7S8663C24v314Ev
  virtual void  v315(); // _ZN7S8663C24v315Ev
  virtual void  v316(); // _ZN7S8663C24v316Ev
  virtual void  v317(); // _ZN7S8663C24v317Ev
  virtual void  v318(); // _ZN7S8663C24v318Ev
  virtual void  v319(); // _ZN7S8663C24v319Ev
  virtual void  v320(); // _ZN7S8663C24v320Ev
  virtual void  v321(); // _ZN7S8663C24v321Ev
  virtual void  v322(); // _ZN7S8663C24v322Ev
  virtual void  v323(); // _ZN7S8663C24v323Ev
  virtual void  v324(); // _ZN7S8663C24v324Ev
  virtual void  v325(); // _ZN7S8663C24v325Ev
  virtual void  v326(); // _ZN7S8663C24v326Ev
  virtual void  v327(); // _ZN7S8663C24v327Ev
  virtual void  v328(); // _ZN7S8663C24v328Ev
  virtual void  v329(); // _ZN7S8663C24v329Ev
  virtual void  v330(); // _ZN7S8663C24v330Ev
  virtual void  v331(); // _ZN7S8663C24v331Ev
  virtual void  v332(); // _ZN7S8663C24v332Ev
  virtual void  v333(); // _ZN7S8663C24v333Ev
  virtual void  v334(); // _ZN7S8663C24v334Ev
  virtual void  v335(); // _ZN7S8663C24v335Ev
  virtual void  v336(); // _ZN7S8663C24v336Ev
  virtual void  v337(); // _ZN7S8663C24v337Ev
  virtual void  v338(); // _ZN7S8663C24v338Ev
  virtual void  v339(); // _ZN7S8663C24v339Ev
  virtual void  v340(); // _ZN7S8663C24v340Ev
  virtual void  v341(); // _ZN7S8663C24v341Ev
  virtual void  v342(); // _ZN7S8663C24v342Ev
  virtual void  v343(); // _ZN7S8663C24v343Ev
  virtual void  v344(); // _ZN7S8663C24v344Ev
  virtual void  v345(); // _ZN7S8663C24v345Ev
  virtual void  v346(); // _ZN7S8663C24v346Ev
  virtual void  v347(); // _ZN7S8663C24v347Ev
  virtual void  v348(); // _ZN7S8663C24v348Ev
  virtual void  v349(); // _ZN7S8663C24v349Ev
  virtual void  v350(); // _ZN7S8663C24v350Ev
  virtual void  v351(); // _ZN7S8663C24v351Ev
  virtual void  v352(); // _ZN7S8663C24v352Ev
  virtual void  v353(); // _ZN7S8663C24v353Ev
  virtual void  v354(); // _ZN7S8663C24v354Ev
  virtual void  v355(); // _ZN7S8663C24v355Ev
  virtual void  v356(); // _ZN7S8663C24v356Ev
  virtual void  v357(); // _ZN7S8663C24v357Ev
  virtual void  v358(); // _ZN7S8663C24v358Ev
  virtual void  v359(); // _ZN7S8663C24v359Ev
  virtual void  v360(); // _ZN7S8663C24v360Ev
  virtual void  v361(); // _ZN7S8663C24v361Ev
  virtual void  v362(); // _ZN7S8663C24v362Ev
  virtual void  v363(); // _ZN7S8663C24v363Ev
  virtual void  v364(); // _ZN7S8663C24v364Ev
  virtual void  v365(); // _ZN7S8663C24v365Ev
  virtual void  v366(); // _ZN7S8663C24v366Ev
  virtual void  v367(); // _ZN7S8663C24v367Ev
  virtual void  v368(); // _ZN7S8663C24v368Ev
  virtual void  v369(); // _ZN7S8663C24v369Ev
  virtual void  v370(); // _ZN7S8663C24v370Ev
  virtual void  v371(); // _ZN7S8663C24v371Ev
  S8663C2(); // tgen
};
//SIG(-1 S8663C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185}


 S8663C2 ::~S8663C2(){ note_dtor("S8663C2", this);}
void  S8663C2 ::v187(){vfunc_called(this, "_ZN7S8663C24v187Ev");}
void  S8663C2 ::v188(){vfunc_called(this, "_ZN7S8663C24v188Ev");}
void  S8663C2 ::v189(){vfunc_called(this, "_ZN7S8663C24v189Ev");}
void  S8663C2 ::v190(){vfunc_called(this, "_ZN7S8663C24v190Ev");}
void  S8663C2 ::v191(){vfunc_called(this, "_ZN7S8663C24v191Ev");}
void  S8663C2 ::v192(){vfunc_called(this, "_ZN7S8663C24v192Ev");}
void  S8663C2 ::v193(){vfunc_called(this, "_ZN7S8663C24v193Ev");}
void  S8663C2 ::v194(){vfunc_called(this, "_ZN7S8663C24v194Ev");}
void  S8663C2 ::v195(){vfunc_called(this, "_ZN7S8663C24v195Ev");}
void  S8663C2 ::v196(){vfunc_called(this, "_ZN7S8663C24v196Ev");}
void  S8663C2 ::v197(){vfunc_called(this, "_ZN7S8663C24v197Ev");}
void  S8663C2 ::v198(){vfunc_called(this, "_ZN7S8663C24v198Ev");}
void  S8663C2 ::v199(){vfunc_called(this, "_ZN7S8663C24v199Ev");}
void  S8663C2 ::v200(){vfunc_called(this, "_ZN7S8663C24v200Ev");}
void  S8663C2 ::v201(){vfunc_called(this, "_ZN7S8663C24v201Ev");}
void  S8663C2 ::v202(){vfunc_called(this, "_ZN7S8663C24v202Ev");}
void  S8663C2 ::v203(){vfunc_called(this, "_ZN7S8663C24v203Ev");}
void  S8663C2 ::v204(){vfunc_called(this, "_ZN7S8663C24v204Ev");}
void  S8663C2 ::v205(){vfunc_called(this, "_ZN7S8663C24v205Ev");}
void  S8663C2 ::v206(){vfunc_called(this, "_ZN7S8663C24v206Ev");}
void  S8663C2 ::v207(){vfunc_called(this, "_ZN7S8663C24v207Ev");}
void  S8663C2 ::v208(){vfunc_called(this, "_ZN7S8663C24v208Ev");}
void  S8663C2 ::v209(){vfunc_called(this, "_ZN7S8663C24v209Ev");}
void  S8663C2 ::v210(){vfunc_called(this, "_ZN7S8663C24v210Ev");}
void  S8663C2 ::v211(){vfunc_called(this, "_ZN7S8663C24v211Ev");}
void  S8663C2 ::v212(){vfunc_called(this, "_ZN7S8663C24v212Ev");}
void  S8663C2 ::v213(){vfunc_called(this, "_ZN7S8663C24v213Ev");}
void  S8663C2 ::v214(){vfunc_called(this, "_ZN7S8663C24v214Ev");}
void  S8663C2 ::v215(){vfunc_called(this, "_ZN7S8663C24v215Ev");}
void  S8663C2 ::v216(){vfunc_called(this, "_ZN7S8663C24v216Ev");}
void  S8663C2 ::v217(){vfunc_called(this, "_ZN7S8663C24v217Ev");}
void  S8663C2 ::v218(){vfunc_called(this, "_ZN7S8663C24v218Ev");}
void  S8663C2 ::v219(){vfunc_called(this, "_ZN7S8663C24v219Ev");}
void  S8663C2 ::v220(){vfunc_called(this, "_ZN7S8663C24v220Ev");}
void  S8663C2 ::v221(){vfunc_called(this, "_ZN7S8663C24v221Ev");}
void  S8663C2 ::v222(){vfunc_called(this, "_ZN7S8663C24v222Ev");}
void  S8663C2 ::v223(){vfunc_called(this, "_ZN7S8663C24v223Ev");}
void  S8663C2 ::v224(){vfunc_called(this, "_ZN7S8663C24v224Ev");}
void  S8663C2 ::v225(){vfunc_called(this, "_ZN7S8663C24v225Ev");}
void  S8663C2 ::v226(){vfunc_called(this, "_ZN7S8663C24v226Ev");}
void  S8663C2 ::v227(){vfunc_called(this, "_ZN7S8663C24v227Ev");}
void  S8663C2 ::v228(){vfunc_called(this, "_ZN7S8663C24v228Ev");}
void  S8663C2 ::v229(){vfunc_called(this, "_ZN7S8663C24v229Ev");}
void  S8663C2 ::v230(){vfunc_called(this, "_ZN7S8663C24v230Ev");}
void  S8663C2 ::v231(){vfunc_called(this, "_ZN7S8663C24v231Ev");}
void  S8663C2 ::v232(){vfunc_called(this, "_ZN7S8663C24v232Ev");}
void  S8663C2 ::v233(){vfunc_called(this, "_ZN7S8663C24v233Ev");}
void  S8663C2 ::v234(){vfunc_called(this, "_ZN7S8663C24v234Ev");}
void  S8663C2 ::v235(){vfunc_called(this, "_ZN7S8663C24v235Ev");}
void  S8663C2 ::v236(){vfunc_called(this, "_ZN7S8663C24v236Ev");}
void  S8663C2 ::v237(){vfunc_called(this, "_ZN7S8663C24v237Ev");}
void  S8663C2 ::v238(){vfunc_called(this, "_ZN7S8663C24v238Ev");}
void  S8663C2 ::v239(){vfunc_called(this, "_ZN7S8663C24v239Ev");}
void  S8663C2 ::v240(){vfunc_called(this, "_ZN7S8663C24v240Ev");}
void  S8663C2 ::v241(){vfunc_called(this, "_ZN7S8663C24v241Ev");}
void  S8663C2 ::v242(){vfunc_called(this, "_ZN7S8663C24v242Ev");}
void  S8663C2 ::v243(){vfunc_called(this, "_ZN7S8663C24v243Ev");}
void  S8663C2 ::v244(){vfunc_called(this, "_ZN7S8663C24v244Ev");}
void  S8663C2 ::v245(){vfunc_called(this, "_ZN7S8663C24v245Ev");}
void  S8663C2 ::v246(){vfunc_called(this, "_ZN7S8663C24v246Ev");}
void  S8663C2 ::v247(){vfunc_called(this, "_ZN7S8663C24v247Ev");}
void  S8663C2 ::v248(){vfunc_called(this, "_ZN7S8663C24v248Ev");}
void  S8663C2 ::v249(){vfunc_called(this, "_ZN7S8663C24v249Ev");}
void  S8663C2 ::v250(){vfunc_called(this, "_ZN7S8663C24v250Ev");}
void  S8663C2 ::v251(){vfunc_called(this, "_ZN7S8663C24v251Ev");}
void  S8663C2 ::v252(){vfunc_called(this, "_ZN7S8663C24v252Ev");}
void  S8663C2 ::v253(){vfunc_called(this, "_ZN7S8663C24v253Ev");}
void  S8663C2 ::v254(){vfunc_called(this, "_ZN7S8663C24v254Ev");}
void  S8663C2 ::v255(){vfunc_called(this, "_ZN7S8663C24v255Ev");}
void  S8663C2 ::v256(){vfunc_called(this, "_ZN7S8663C24v256Ev");}
void  S8663C2 ::v257(){vfunc_called(this, "_ZN7S8663C24v257Ev");}
void  S8663C2 ::v258(){vfunc_called(this, "_ZN7S8663C24v258Ev");}
void  S8663C2 ::v259(){vfunc_called(this, "_ZN7S8663C24v259Ev");}
void  S8663C2 ::v260(){vfunc_called(this, "_ZN7S8663C24v260Ev");}
void  S8663C2 ::v261(){vfunc_called(this, "_ZN7S8663C24v261Ev");}
void  S8663C2 ::v262(){vfunc_called(this, "_ZN7S8663C24v262Ev");}
void  S8663C2 ::v263(){vfunc_called(this, "_ZN7S8663C24v263Ev");}
void  S8663C2 ::v264(){vfunc_called(this, "_ZN7S8663C24v264Ev");}
void  S8663C2 ::v265(){vfunc_called(this, "_ZN7S8663C24v265Ev");}
void  S8663C2 ::v266(){vfunc_called(this, "_ZN7S8663C24v266Ev");}
void  S8663C2 ::v267(){vfunc_called(this, "_ZN7S8663C24v267Ev");}
void  S8663C2 ::v268(){vfunc_called(this, "_ZN7S8663C24v268Ev");}
void  S8663C2 ::v269(){vfunc_called(this, "_ZN7S8663C24v269Ev");}
void  S8663C2 ::v270(){vfunc_called(this, "_ZN7S8663C24v270Ev");}
void  S8663C2 ::v271(){vfunc_called(this, "_ZN7S8663C24v271Ev");}
void  S8663C2 ::v272(){vfunc_called(this, "_ZN7S8663C24v272Ev");}
void  S8663C2 ::v273(){vfunc_called(this, "_ZN7S8663C24v273Ev");}
void  S8663C2 ::v274(){vfunc_called(this, "_ZN7S8663C24v274Ev");}
void  S8663C2 ::v275(){vfunc_called(this, "_ZN7S8663C24v275Ev");}
void  S8663C2 ::v276(){vfunc_called(this, "_ZN7S8663C24v276Ev");}
void  S8663C2 ::v277(){vfunc_called(this, "_ZN7S8663C24v277Ev");}
void  S8663C2 ::v278(){vfunc_called(this, "_ZN7S8663C24v278Ev");}
void  S8663C2 ::v279(){vfunc_called(this, "_ZN7S8663C24v279Ev");}
void  S8663C2 ::v280(){vfunc_called(this, "_ZN7S8663C24v280Ev");}
void  S8663C2 ::v281(){vfunc_called(this, "_ZN7S8663C24v281Ev");}
void  S8663C2 ::v282(){vfunc_called(this, "_ZN7S8663C24v282Ev");}
void  S8663C2 ::v283(){vfunc_called(this, "_ZN7S8663C24v283Ev");}
void  S8663C2 ::v284(){vfunc_called(this, "_ZN7S8663C24v284Ev");}
void  S8663C2 ::v285(){vfunc_called(this, "_ZN7S8663C24v285Ev");}
void  S8663C2 ::v286(){vfunc_called(this, "_ZN7S8663C24v286Ev");}
void  S8663C2 ::v287(){vfunc_called(this, "_ZN7S8663C24v287Ev");}
void  S8663C2 ::v288(){vfunc_called(this, "_ZN7S8663C24v288Ev");}
void  S8663C2 ::v289(){vfunc_called(this, "_ZN7S8663C24v289Ev");}
void  S8663C2 ::v290(){vfunc_called(this, "_ZN7S8663C24v290Ev");}
void  S8663C2 ::v291(){vfunc_called(this, "_ZN7S8663C24v291Ev");}
void  S8663C2 ::v292(){vfunc_called(this, "_ZN7S8663C24v292Ev");}
void  S8663C2 ::v293(){vfunc_called(this, "_ZN7S8663C24v293Ev");}
void  S8663C2 ::v294(){vfunc_called(this, "_ZN7S8663C24v294Ev");}
void  S8663C2 ::v295(){vfunc_called(this, "_ZN7S8663C24v295Ev");}
void  S8663C2 ::v296(){vfunc_called(this, "_ZN7S8663C24v296Ev");}
void  S8663C2 ::v297(){vfunc_called(this, "_ZN7S8663C24v297Ev");}
void  S8663C2 ::v298(){vfunc_called(this, "_ZN7S8663C24v298Ev");}
void  S8663C2 ::v299(){vfunc_called(this, "_ZN7S8663C24v299Ev");}
void  S8663C2 ::v300(){vfunc_called(this, "_ZN7S8663C24v300Ev");}
void  S8663C2 ::v301(){vfunc_called(this, "_ZN7S8663C24v301Ev");}
void  S8663C2 ::v302(){vfunc_called(this, "_ZN7S8663C24v302Ev");}
void  S8663C2 ::v303(){vfunc_called(this, "_ZN7S8663C24v303Ev");}
void  S8663C2 ::v304(){vfunc_called(this, "_ZN7S8663C24v304Ev");}
void  S8663C2 ::v305(){vfunc_called(this, "_ZN7S8663C24v305Ev");}
void  S8663C2 ::v306(){vfunc_called(this, "_ZN7S8663C24v306Ev");}
void  S8663C2 ::v307(){vfunc_called(this, "_ZN7S8663C24v307Ev");}
void  S8663C2 ::v308(){vfunc_called(this, "_ZN7S8663C24v308Ev");}
void  S8663C2 ::v309(){vfunc_called(this, "_ZN7S8663C24v309Ev");}
void  S8663C2 ::v310(){vfunc_called(this, "_ZN7S8663C24v310Ev");}
void  S8663C2 ::v311(){vfunc_called(this, "_ZN7S8663C24v311Ev");}
void  S8663C2 ::v312(){vfunc_called(this, "_ZN7S8663C24v312Ev");}
void  S8663C2 ::v313(){vfunc_called(this, "_ZN7S8663C24v313Ev");}
void  S8663C2 ::v314(){vfunc_called(this, "_ZN7S8663C24v314Ev");}
void  S8663C2 ::v315(){vfunc_called(this, "_ZN7S8663C24v315Ev");}
void  S8663C2 ::v316(){vfunc_called(this, "_ZN7S8663C24v316Ev");}
void  S8663C2 ::v317(){vfunc_called(this, "_ZN7S8663C24v317Ev");}
void  S8663C2 ::v318(){vfunc_called(this, "_ZN7S8663C24v318Ev");}
void  S8663C2 ::v319(){vfunc_called(this, "_ZN7S8663C24v319Ev");}
void  S8663C2 ::v320(){vfunc_called(this, "_ZN7S8663C24v320Ev");}
void  S8663C2 ::v321(){vfunc_called(this, "_ZN7S8663C24v321Ev");}
void  S8663C2 ::v322(){vfunc_called(this, "_ZN7S8663C24v322Ev");}
void  S8663C2 ::v323(){vfunc_called(this, "_ZN7S8663C24v323Ev");}
void  S8663C2 ::v324(){vfunc_called(this, "_ZN7S8663C24v324Ev");}
void  S8663C2 ::v325(){vfunc_called(this, "_ZN7S8663C24v325Ev");}
void  S8663C2 ::v326(){vfunc_called(this, "_ZN7S8663C24v326Ev");}
void  S8663C2 ::v327(){vfunc_called(this, "_ZN7S8663C24v327Ev");}
void  S8663C2 ::v328(){vfunc_called(this, "_ZN7S8663C24v328Ev");}
void  S8663C2 ::v329(){vfunc_called(this, "_ZN7S8663C24v329Ev");}
void  S8663C2 ::v330(){vfunc_called(this, "_ZN7S8663C24v330Ev");}
void  S8663C2 ::v331(){vfunc_called(this, "_ZN7S8663C24v331Ev");}
void  S8663C2 ::v332(){vfunc_called(this, "_ZN7S8663C24v332Ev");}
void  S8663C2 ::v333(){vfunc_called(this, "_ZN7S8663C24v333Ev");}
void  S8663C2 ::v334(){vfunc_called(this, "_ZN7S8663C24v334Ev");}
void  S8663C2 ::v335(){vfunc_called(this, "_ZN7S8663C24v335Ev");}
void  S8663C2 ::v336(){vfunc_called(this, "_ZN7S8663C24v336Ev");}
void  S8663C2 ::v337(){vfunc_called(this, "_ZN7S8663C24v337Ev");}
void  S8663C2 ::v338(){vfunc_called(this, "_ZN7S8663C24v338Ev");}
void  S8663C2 ::v339(){vfunc_called(this, "_ZN7S8663C24v339Ev");}
void  S8663C2 ::v340(){vfunc_called(this, "_ZN7S8663C24v340Ev");}
void  S8663C2 ::v341(){vfunc_called(this, "_ZN7S8663C24v341Ev");}
void  S8663C2 ::v342(){vfunc_called(this, "_ZN7S8663C24v342Ev");}
void  S8663C2 ::v343(){vfunc_called(this, "_ZN7S8663C24v343Ev");}
void  S8663C2 ::v344(){vfunc_called(this, "_ZN7S8663C24v344Ev");}
void  S8663C2 ::v345(){vfunc_called(this, "_ZN7S8663C24v345Ev");}
void  S8663C2 ::v346(){vfunc_called(this, "_ZN7S8663C24v346Ev");}
void  S8663C2 ::v347(){vfunc_called(this, "_ZN7S8663C24v347Ev");}
void  S8663C2 ::v348(){vfunc_called(this, "_ZN7S8663C24v348Ev");}
void  S8663C2 ::v349(){vfunc_called(this, "_ZN7S8663C24v349Ev");}
void  S8663C2 ::v350(){vfunc_called(this, "_ZN7S8663C24v350Ev");}
void  S8663C2 ::v351(){vfunc_called(this, "_ZN7S8663C24v351Ev");}
void  S8663C2 ::v352(){vfunc_called(this, "_ZN7S8663C24v352Ev");}
void  S8663C2 ::v353(){vfunc_called(this, "_ZN7S8663C24v353Ev");}
void  S8663C2 ::v354(){vfunc_called(this, "_ZN7S8663C24v354Ev");}
void  S8663C2 ::v355(){vfunc_called(this, "_ZN7S8663C24v355Ev");}
void  S8663C2 ::v356(){vfunc_called(this, "_ZN7S8663C24v356Ev");}
void  S8663C2 ::v357(){vfunc_called(this, "_ZN7S8663C24v357Ev");}
void  S8663C2 ::v358(){vfunc_called(this, "_ZN7S8663C24v358Ev");}
void  S8663C2 ::v359(){vfunc_called(this, "_ZN7S8663C24v359Ev");}
void  S8663C2 ::v360(){vfunc_called(this, "_ZN7S8663C24v360Ev");}
void  S8663C2 ::v361(){vfunc_called(this, "_ZN7S8663C24v361Ev");}
void  S8663C2 ::v362(){vfunc_called(this, "_ZN7S8663C24v362Ev");}
void  S8663C2 ::v363(){vfunc_called(this, "_ZN7S8663C24v363Ev");}
void  S8663C2 ::v364(){vfunc_called(this, "_ZN7S8663C24v364Ev");}
void  S8663C2 ::v365(){vfunc_called(this, "_ZN7S8663C24v365Ev");}
void  S8663C2 ::v366(){vfunc_called(this, "_ZN7S8663C24v366Ev");}
void  S8663C2 ::v367(){vfunc_called(this, "_ZN7S8663C24v367Ev");}
void  S8663C2 ::v368(){vfunc_called(this, "_ZN7S8663C24v368Ev");}
void  S8663C2 ::v369(){vfunc_called(this, "_ZN7S8663C24v369Ev");}
void  S8663C2 ::v370(){vfunc_called(this, "_ZN7S8663C24v370Ev");}
void  S8663C2 ::v371(){vfunc_called(this, "_ZN7S8663C24v371Ev");}
S8663C2 ::S8663C2(){ note_ctor("S8663C2", this);} // tgen

static void Test_S8663C2()
{
  extern Class_Descriptor cd_S8663C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8663C2, buf);
    S8663C2 *dp, &lv = *(dp=new (buf) S8663C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8663C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8663C2)");
    test_class_info(&lv, &cd_S8663C2);
    dp->~S8663C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8663C2(Test_S8663C2, "S8663C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8663C2C1Ev();
extern void _ZN7S8663C2D1Ev();
Name_Map name_map_S8663C2[] = {
  NSPAIR(_ZN7S8663C2C1Ev),
  NSPAIR(_ZN7S8663C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8663C2[];
extern void _ZN7S8663C2D1Ev();
extern void _ZN7S8663C2D0Ev();
extern void _ZN7S8663C24v187Ev();
extern void _ZN7S8663C24v188Ev();
extern void _ZN7S8663C24v189Ev();
extern void _ZN7S8663C24v190Ev();
extern void _ZN7S8663C24v191Ev();
extern void _ZN7S8663C24v192Ev();
extern void _ZN7S8663C24v193Ev();
extern void _ZN7S8663C24v194Ev();
extern void _ZN7S8663C24v195Ev();
extern void _ZN7S8663C24v196Ev();
extern void _ZN7S8663C24v197Ev();
extern void _ZN7S8663C24v198Ev();
extern void _ZN7S8663C24v199Ev();
extern void _ZN7S8663C24v200Ev();
extern void _ZN7S8663C24v201Ev();
extern void _ZN7S8663C24v202Ev();
extern void _ZN7S8663C24v203Ev();
extern void _ZN7S8663C24v204Ev();
extern void _ZN7S8663C24v205Ev();
extern void _ZN7S8663C24v206Ev();
extern void _ZN7S8663C24v207Ev();
extern void _ZN7S8663C24v208Ev();
extern void _ZN7S8663C24v209Ev();
extern void _ZN7S8663C24v210Ev();
extern void _ZN7S8663C24v211Ev();
extern void _ZN7S8663C24v212Ev();
extern void _ZN7S8663C24v213Ev();
extern void _ZN7S8663C24v214Ev();
extern void _ZN7S8663C24v215Ev();
extern void _ZN7S8663C24v216Ev();
extern void _ZN7S8663C24v217Ev();
extern void _ZN7S8663C24v218Ev();
extern void _ZN7S8663C24v219Ev();
extern void _ZN7S8663C24v220Ev();
extern void _ZN7S8663C24v221Ev();
extern void _ZN7S8663C24v222Ev();
extern void _ZN7S8663C24v223Ev();
extern void _ZN7S8663C24v224Ev();
extern void _ZN7S8663C24v225Ev();
extern void _ZN7S8663C24v226Ev();
extern void _ZN7S8663C24v227Ev();
extern void _ZN7S8663C24v228Ev();
extern void _ZN7S8663C24v229Ev();
extern void _ZN7S8663C24v230Ev();
extern void _ZN7S8663C24v231Ev();
extern void _ZN7S8663C24v232Ev();
extern void _ZN7S8663C24v233Ev();
extern void _ZN7S8663C24v234Ev();
extern void _ZN7S8663C24v235Ev();
extern void _ZN7S8663C24v236Ev();
extern void _ZN7S8663C24v237Ev();
extern void _ZN7S8663C24v238Ev();
extern void _ZN7S8663C24v239Ev();
extern void _ZN7S8663C24v240Ev();
extern void _ZN7S8663C24v241Ev();
extern void _ZN7S8663C24v242Ev();
extern void _ZN7S8663C24v243Ev();
extern void _ZN7S8663C24v244Ev();
extern void _ZN7S8663C24v245Ev();
extern void _ZN7S8663C24v246Ev();
extern void _ZN7S8663C24v247Ev();
extern void _ZN7S8663C24v248Ev();
extern void _ZN7S8663C24v249Ev();
extern void _ZN7S8663C24v250Ev();
extern void _ZN7S8663C24v251Ev();
extern void _ZN7S8663C24v252Ev();
extern void _ZN7S8663C24v253Ev();
extern void _ZN7S8663C24v254Ev();
extern void _ZN7S8663C24v255Ev();
extern void _ZN7S8663C24v256Ev();
extern void _ZN7S8663C24v257Ev();
extern void _ZN7S8663C24v258Ev();
extern void _ZN7S8663C24v259Ev();
extern void _ZN7S8663C24v260Ev();
extern void _ZN7S8663C24v261Ev();
extern void _ZN7S8663C24v262Ev();
extern void _ZN7S8663C24v263Ev();
extern void _ZN7S8663C24v264Ev();
extern void _ZN7S8663C24v265Ev();
extern void _ZN7S8663C24v266Ev();
extern void _ZN7S8663C24v267Ev();
extern void _ZN7S8663C24v268Ev();
extern void _ZN7S8663C24v269Ev();
extern void _ZN7S8663C24v270Ev();
extern void _ZN7S8663C24v271Ev();
extern void _ZN7S8663C24v272Ev();
extern void _ZN7S8663C24v273Ev();
extern void _ZN7S8663C24v274Ev();
extern void _ZN7S8663C24v275Ev();
extern void _ZN7S8663C24v276Ev();
extern void _ZN7S8663C24v277Ev();
extern void _ZN7S8663C24v278Ev();
extern void _ZN7S8663C24v279Ev();
extern void _ZN7S8663C24v280Ev();
extern void _ZN7S8663C24v281Ev();
extern void _ZN7S8663C24v282Ev();
extern void _ZN7S8663C24v283Ev();
extern void _ZN7S8663C24v284Ev();
extern void _ZN7S8663C24v285Ev();
extern void _ZN7S8663C24v286Ev();
extern void _ZN7S8663C24v287Ev();
extern void _ZN7S8663C24v288Ev();
extern void _ZN7S8663C24v289Ev();
extern void _ZN7S8663C24v290Ev();
extern void _ZN7S8663C24v291Ev();
extern void _ZN7S8663C24v292Ev();
extern void _ZN7S8663C24v293Ev();
extern void _ZN7S8663C24v294Ev();
extern void _ZN7S8663C24v295Ev();
extern void _ZN7S8663C24v296Ev();
extern void _ZN7S8663C24v297Ev();
extern void _ZN7S8663C24v298Ev();
extern void _ZN7S8663C24v299Ev();
extern void _ZN7S8663C24v300Ev();
extern void _ZN7S8663C24v301Ev();
extern void _ZN7S8663C24v302Ev();
extern void _ZN7S8663C24v303Ev();
extern void _ZN7S8663C24v304Ev();
extern void _ZN7S8663C24v305Ev();
extern void _ZN7S8663C24v306Ev();
extern void _ZN7S8663C24v307Ev();
extern void _ZN7S8663C24v308Ev();
extern void _ZN7S8663C24v309Ev();
extern void _ZN7S8663C24v310Ev();
extern void _ZN7S8663C24v311Ev();
extern void _ZN7S8663C24v312Ev();
extern void _ZN7S8663C24v313Ev();
extern void _ZN7S8663C24v314Ev();
extern void _ZN7S8663C24v315Ev();
extern void _ZN7S8663C24v316Ev();
extern void _ZN7S8663C24v317Ev();
extern void _ZN7S8663C24v318Ev();
extern void _ZN7S8663C24v319Ev();
extern void _ZN7S8663C24v320Ev();
extern void _ZN7S8663C24v321Ev();
extern void _ZN7S8663C24v322Ev();
extern void _ZN7S8663C24v323Ev();
extern void _ZN7S8663C24v324Ev();
extern void _ZN7S8663C24v325Ev();
extern void _ZN7S8663C24v326Ev();
extern void _ZN7S8663C24v327Ev();
extern void _ZN7S8663C24v328Ev();
extern void _ZN7S8663C24v329Ev();
extern void _ZN7S8663C24v330Ev();
extern void _ZN7S8663C24v331Ev();
extern void _ZN7S8663C24v332Ev();
extern void _ZN7S8663C24v333Ev();
extern void _ZN7S8663C24v334Ev();
extern void _ZN7S8663C24v335Ev();
extern void _ZN7S8663C24v336Ev();
extern void _ZN7S8663C24v337Ev();
extern void _ZN7S8663C24v338Ev();
extern void _ZN7S8663C24v339Ev();
extern void _ZN7S8663C24v340Ev();
extern void _ZN7S8663C24v341Ev();
extern void _ZN7S8663C24v342Ev();
extern void _ZN7S8663C24v343Ev();
extern void _ZN7S8663C24v344Ev();
extern void _ZN7S8663C24v345Ev();
extern void _ZN7S8663C24v346Ev();
extern void _ZN7S8663C24v347Ev();
extern void _ZN7S8663C24v348Ev();
extern void _ZN7S8663C24v349Ev();
extern void _ZN7S8663C24v350Ev();
extern void _ZN7S8663C24v351Ev();
extern void _ZN7S8663C24v352Ev();
extern void _ZN7S8663C24v353Ev();
extern void _ZN7S8663C24v354Ev();
extern void _ZN7S8663C24v355Ev();
extern void _ZN7S8663C24v356Ev();
extern void _ZN7S8663C24v357Ev();
extern void _ZN7S8663C24v358Ev();
extern void _ZN7S8663C24v359Ev();
extern void _ZN7S8663C24v360Ev();
extern void _ZN7S8663C24v361Ev();
extern void _ZN7S8663C24v362Ev();
extern void _ZN7S8663C24v363Ev();
extern void _ZN7S8663C24v364Ev();
extern void _ZN7S8663C24v365Ev();
extern void _ZN7S8663C24v366Ev();
extern void _ZN7S8663C24v367Ev();
extern void _ZN7S8663C24v368Ev();
extern void _ZN7S8663C24v369Ev();
extern void _ZN7S8663C24v370Ev();
extern void _ZN7S8663C24v371Ev();
static  VTBL_ENTRY vtc_S8663C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8663C2[0]),
  (VTBL_ENTRY)&_ZN7S8663C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8663C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v187Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v188Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v189Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v190Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v191Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v192Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v193Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v194Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v195Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v196Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v197Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v198Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v199Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v200Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v201Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v202Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v203Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v204Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v205Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v206Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v207Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v208Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v209Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v210Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v211Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v212Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v213Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v214Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v215Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v216Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v217Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v218Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v219Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v220Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v221Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v222Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v223Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v224Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v225Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v226Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v227Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v228Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v229Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v230Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v231Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v232Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v233Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v234Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v235Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v236Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v237Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v238Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v239Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v240Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v241Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v242Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v243Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v244Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v245Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v246Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v247Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v248Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v249Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v250Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v251Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v252Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v253Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v254Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v255Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v256Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v257Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v258Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v259Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v260Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v261Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v262Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v263Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v264Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v265Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v266Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v267Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v268Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v269Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v270Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v271Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v272Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v273Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v274Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v275Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v276Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v277Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v278Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v279Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v280Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v281Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v282Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v283Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v284Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v285Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v286Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v287Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v288Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v289Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v290Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v291Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v292Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v293Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v294Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v295Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v296Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v297Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v298Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v299Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v300Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v301Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v302Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v303Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v304Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v305Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v306Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v307Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v308Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v309Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v310Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v311Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v312Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v313Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v314Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v315Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v316Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v317Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v318Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v319Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v320Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v321Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v322Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v323Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v324Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v325Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v326Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v327Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v328Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v329Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v330Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v331Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v332Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v333Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v334Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v335Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v336Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v337Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v338Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v339Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v340Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v341Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v342Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v343Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v344Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v345Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v346Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v347Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v348Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v349Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v350Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v351Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v352Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v353Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v354Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v355Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v356Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v357Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v358Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v359Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v360Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v361Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v362Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v363Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v364Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v365Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v366Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v367Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v368Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v369Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v370Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v371Ev,
};
extern VTBL_ENTRY _ZTI7S8663C2[];
extern  VTBL_ENTRY _ZTV7S8663C2[];
Class_Descriptor cd_S8663C2 = {  "S8663C2", // class name
  0,0,//no base classes
  &(vtc_S8663C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8663C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8663C2),189, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8663C5_nt  {
  void  mf8663c5(); // _ZN10S8663C5_nt8mf8663c5Ev
};
//SIG(-1 S8663C5_nt) C1{ m}


void  S8663C5_nt ::mf8663c5(){}

//skip512 S8663C5_nt

#else // __cplusplus

Class_Descriptor cd_S8663C5_nt = {  "S8663C5_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8663C4_nt  {
  void *s8663c4f0;
  int s8663c4f1[2];
  ::S8663C5_nt s8663c4f2;
  void  mf8663c4(); // _ZN10S8663C4_nt8mf8663c4Ev
};
//SIG(-1 S8663C4_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S8663C4_nt ::mf8663c4(){}

//skip512 S8663C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8663C3  {
  ::S8663C4_nt s8663c3f0;
  void  mf8663c3(); // _ZN7S8663C38mf8663c3Ev
  virtual  ~S8663C3(); // _ZN7S8663C3D1Ev
  S8663C3(); // tgen
};
//SIG(-1 S8663C3) C1{ vd m FC2{ m Fp Fi[2] FC3{ m}}}


void  S8663C3 ::mf8663c3(){}
 S8663C3 ::~S8663C3(){ note_dtor("S8663C3", this);}
S8663C3 ::S8663C3(){ note_ctor("S8663C3", this);} // tgen

static void Test_S8663C3()
{
  extern Class_Descriptor cd_S8663C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S8663C3, buf);
    S8663C3 *dp, &lv = *(dp=new (buf) S8663C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S8663C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8663C3)");
    check_field_offset(lv, s8663c3f0, ABISELECT(8,4), "S8663C3.s8663c3f0");
    test_class_info(&lv, &cd_S8663C3);
    dp->~S8663C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8663C3(Test_S8663C3, "S8663C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S8663C3C1Ev();
extern void _ZN7S8663C3D1Ev();
Name_Map name_map_S8663C3[] = {
  NSPAIR(_ZN7S8663C3C1Ev),
  NSPAIR(_ZN7S8663C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8663C3[];
extern void _ZN7S8663C3D1Ev();
extern void _ZN7S8663C3D0Ev();
static  VTBL_ENTRY vtc_S8663C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8663C3[0]),
  (VTBL_ENTRY)&_ZN7S8663C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8663C3D0Ev,
};
extern VTBL_ENTRY _ZTI7S8663C3[];
extern  VTBL_ENTRY _ZTV7S8663C3[];
Class_Descriptor cd_S8663C3 = {  "S8663C3", // class name
  0,0,//no base classes
  &(vtc_S8663C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S8663C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8663C3),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8663C6_nt  {
  virtual  ~S8663C6_nt(); // _ZN10S8663C6_ntD1Ev
  virtual void  v372(); // _ZN10S8663C6_nt4v372Ev
  S8663C6_nt(); // tgen
};
//SIG(-1 S8663C6_nt) C1{ vd v1}


 S8663C6_nt ::~S8663C6_nt(){ note_dtor("S8663C6_nt", this);}
void  S8663C6_nt ::v372(){vfunc_called(this, "_ZN10S8663C6_nt4v372Ev");}
S8663C6_nt ::S8663C6_nt(){ note_ctor("S8663C6_nt", this);} // tgen

//skip512 S8663C6_nt

#else // __cplusplus

extern void _ZN10S8663C6_ntC1Ev();
extern void _ZN10S8663C6_ntD1Ev();
Name_Map name_map_S8663C6_nt[] = {
  NSPAIR(_ZN10S8663C6_ntC1Ev),
  NSPAIR(_ZN10S8663C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8663C6_nt[];
extern void _ZN10S8663C6_ntD1Ev();
extern void _ZN10S8663C6_ntD0Ev();
extern void _ZN10S8663C6_nt4v372Ev();
static  VTBL_ENTRY vtc_S8663C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8663C6_nt[0]),
  (VTBL_ENTRY)&_ZN10S8663C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8663C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8663C6_nt4v372Ev,
};
extern VTBL_ENTRY _ZTI10S8663C6_nt[];
VTBL_ENTRY *P__ZTI10S8663C6_nt = _ZTI10S8663C6_nt; 
extern  VTBL_ENTRY _ZTV10S8663C6_nt[];
Class_Descriptor cd_S8663C6_nt = {  "S8663C6_nt", // class name
  0,0,//no base classes
  &(vtc_S8663C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S8663C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8663C6_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8663C10_nt  {
  int s8663c10f0[4];
  void  mf8663c10(); // _ZN11S8663C10_nt9mf8663c10Ev
};
//SIG(-1 S8663C10_nt) C1{ m Fi[4]}


void  S8663C10_nt ::mf8663c10(){}

//skip512 S8663C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8663C7_nt  {
  ::S8663C4_nt s8663c7f0;
  ::S8663C10_nt s8663c7f1[3];
  void *s8663c7f2[2];
  int s8663c7f3;
  char s8663c7f4;
  virtual  ~S8663C7_nt(); // _ZN10S8663C7_ntD1Ev
  virtual void  v373(); // _ZN10S8663C7_nt4v373Ev
  virtual void  v374(); // _ZN10S8663C7_nt4v374Ev
  S8663C7_nt(); // tgen
};
//SIG(-1 S8663C7_nt) C1{ vd v1 v2 FC2{ m Fp Fi[2] FC3{ m}} FC4{ m Fi[4]}[3] Fp[2] Fi Fc}


 S8663C7_nt ::~S8663C7_nt(){ note_dtor("S8663C7_nt", this);}
void  S8663C7_nt ::v373(){vfunc_called(this, "_ZN10S8663C7_nt4v373Ev");}
void  S8663C7_nt ::v374(){vfunc_called(this, "_ZN10S8663C7_nt4v374Ev");}
S8663C7_nt ::S8663C7_nt(){ note_ctor("S8663C7_nt", this);} // tgen

//skip512 S8663C7_nt

#else // __cplusplus

extern void _ZN10S8663C7_ntC1Ev();
extern void _ZN10S8663C7_ntD1Ev();
Name_Map name_map_S8663C7_nt[] = {
  NSPAIR(_ZN10S8663C7_ntC1Ev),
  NSPAIR(_ZN10S8663C7_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8663C7_nt[];
extern void _ZN10S8663C7_ntD1Ev();
extern void _ZN10S8663C7_ntD0Ev();
extern void _ZN10S8663C7_nt4v373Ev();
extern void _ZN10S8663C7_nt4v374Ev();
static  VTBL_ENTRY vtc_S8663C7_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8663C7_nt[0]),
  (VTBL_ENTRY)&_ZN10S8663C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8663C7_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8663C7_nt4v373Ev,
  (VTBL_ENTRY)&_ZN10S8663C7_nt4v374Ev,
};
extern VTBL_ENTRY _ZTI10S8663C7_nt[];
VTBL_ENTRY *P__ZTI10S8663C7_nt = _ZTI10S8663C7_nt; 
extern  VTBL_ENTRY _ZTV10S8663C7_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8663C1  : S8663C2 , S8663C3 , S8663C6_nt {
  void *s8663c1f0[17];
  ::S8663C7_nt s8663c1f1;
  virtual  ~S8663C1(); // _ZN7S8663C1D1Ev
  virtual void  v1(); // _ZN7S8663C12v1Ev
  virtual void  v2(); // _ZN7S8663C12v2Ev
  virtual void  v3(); // _ZN7S8663C12v3Ev
  virtual void  v4(); // _ZN7S8663C12v4Ev
  virtual void  v5(); // _ZN7S8663C12v5Ev
  virtual void  v6(); // _ZN7S8663C12v6Ev
  virtual void  v7(); // _ZN7S8663C12v7Ev
  virtual void  v8(); // _ZN7S8663C12v8Ev
  virtual void  v9(); // _ZN7S8663C12v9Ev
  virtual void  v10(); // _ZN7S8663C13v10Ev
  virtual void  v11(); // _ZN7S8663C13v11Ev
  virtual void  v12(); // _ZN7S8663C13v12Ev
  virtual void  v13(); // _ZN7S8663C13v13Ev
  virtual void  v14(); // _ZN7S8663C13v14Ev
  virtual void  v15(); // _ZN7S8663C13v15Ev
  virtual void  v16(); // _ZN7S8663C13v16Ev
  virtual void  v17(); // _ZN7S8663C13v17Ev
  virtual void  v18(); // _ZN7S8663C13v18Ev
  virtual void  v19(); // _ZN7S8663C13v19Ev
  virtual void  v20(); // _ZN7S8663C13v20Ev
  virtual void  v21(); // _ZN7S8663C13v21Ev
  virtual void  v22(); // _ZN7S8663C13v22Ev
  virtual void  v23(); // _ZN7S8663C13v23Ev
  virtual void  v24(); // _ZN7S8663C13v24Ev
  virtual void  v25(); // _ZN7S8663C13v25Ev
  virtual void  v26(); // _ZN7S8663C13v26Ev
  virtual void  v27(); // _ZN7S8663C13v27Ev
  virtual void  v28(); // _ZN7S8663C13v28Ev
  virtual void  v29(); // _ZN7S8663C13v29Ev
  virtual void  v30(); // _ZN7S8663C13v30Ev
  virtual void  v31(); // _ZN7S8663C13v31Ev
  virtual void  v32(); // _ZN7S8663C13v32Ev
  virtual void  v33(); // _ZN7S8663C13v33Ev
  virtual void  v34(); // _ZN7S8663C13v34Ev
  virtual void  v35(); // _ZN7S8663C13v35Ev
  virtual void  v36(); // _ZN7S8663C13v36Ev
  virtual void  v37(); // _ZN7S8663C13v37Ev
  virtual void  v38(); // _ZN7S8663C13v38Ev
  virtual void  v39(); // _ZN7S8663C13v39Ev
  virtual void  v40(); // _ZN7S8663C13v40Ev
  virtual void  v41(); // _ZN7S8663C13v41Ev
  virtual void  v42(); // _ZN7S8663C13v42Ev
  virtual void  v43(); // _ZN7S8663C13v43Ev
  virtual void  v44(); // _ZN7S8663C13v44Ev
  virtual void  v45(); // _ZN7S8663C13v45Ev
  virtual void  v46(); // _ZN7S8663C13v46Ev
  virtual void  v47(); // _ZN7S8663C13v47Ev
  virtual void  v48(); // _ZN7S8663C13v48Ev
  virtual void  v49(); // _ZN7S8663C13v49Ev
  virtual void  v50(); // _ZN7S8663C13v50Ev
  virtual void  v51(); // _ZN7S8663C13v51Ev
  virtual void  v52(); // _ZN7S8663C13v52Ev
  virtual void  v53(); // _ZN7S8663C13v53Ev
  virtual void  v54(); // _ZN7S8663C13v54Ev
  virtual void  v55(); // _ZN7S8663C13v55Ev
  virtual void  v56(); // _ZN7S8663C13v56Ev
  virtual void  v57(); // _ZN7S8663C13v57Ev
  virtual void  v58(); // _ZN7S8663C13v58Ev
  virtual void  v59(); // _ZN7S8663C13v59Ev
  virtual void  v60(); // _ZN7S8663C13v60Ev
  virtual void  v61(); // _ZN7S8663C13v61Ev
  virtual void  v62(); // _ZN7S8663C13v62Ev
  virtual void  v63(); // _ZN7S8663C13v63Ev
  virtual void  v64(); // _ZN7S8663C13v64Ev
  virtual void  v65(); // _ZN7S8663C13v65Ev
  virtual void  v66(); // _ZN7S8663C13v66Ev
  virtual void  v67(); // _ZN7S8663C13v67Ev
  virtual void  v68(); // _ZN7S8663C13v68Ev
  virtual void  v69(); // _ZN7S8663C13v69Ev
  virtual void  v70(); // _ZN7S8663C13v70Ev
  virtual void  v71(); // _ZN7S8663C13v71Ev
  virtual void  v72(); // _ZN7S8663C13v72Ev
  virtual void  v73(); // _ZN7S8663C13v73Ev
  virtual void  v74(); // _ZN7S8663C13v74Ev
  virtual void  v75(); // _ZN7S8663C13v75Ev
  virtual void  v76(); // _ZN7S8663C13v76Ev
  virtual void  v77(); // _ZN7S8663C13v77Ev
  virtual void  v78(); // _ZN7S8663C13v78Ev
  virtual void  v79(); // _ZN7S8663C13v79Ev
  virtual void  v80(); // _ZN7S8663C13v80Ev
  virtual void  v81(); // _ZN7S8663C13v81Ev
  virtual void  v82(); // _ZN7S8663C13v82Ev
  virtual void  v83(); // _ZN7S8663C13v83Ev
  virtual void  v84(); // _ZN7S8663C13v84Ev
  virtual void  v85(); // _ZN7S8663C13v85Ev
  virtual void  v86(); // _ZN7S8663C13v86Ev
  virtual void  v87(); // _ZN7S8663C13v87Ev
  virtual void  v88(); // _ZN7S8663C13v88Ev
  virtual void  v89(); // _ZN7S8663C13v89Ev
  virtual void  v90(); // _ZN7S8663C13v90Ev
  virtual void  v91(); // _ZN7S8663C13v91Ev
  virtual void  v92(); // _ZN7S8663C13v92Ev
  virtual void  v93(); // _ZN7S8663C13v93Ev
  virtual void  v94(); // _ZN7S8663C13v94Ev
  virtual void  v95(); // _ZN7S8663C13v95Ev
  virtual void  v96(); // _ZN7S8663C13v96Ev
  virtual void  v97(); // _ZN7S8663C13v97Ev
  virtual void  v98(); // _ZN7S8663C13v98Ev
  virtual void  v99(); // _ZN7S8663C13v99Ev
  virtual void  v100(); // _ZN7S8663C14v100Ev
  virtual void  v101(); // _ZN7S8663C14v101Ev
  virtual void  v102(); // _ZN7S8663C14v102Ev
  virtual void  v103(); // _ZN7S8663C14v103Ev
  virtual void  v104(); // _ZN7S8663C14v104Ev
  virtual void  v105(); // _ZN7S8663C14v105Ev
  virtual void  v106(); // _ZN7S8663C14v106Ev
  virtual void  v107(); // _ZN7S8663C14v107Ev
  virtual void  v108(); // _ZN7S8663C14v108Ev
  virtual void  v109(); // _ZN7S8663C14v109Ev
  virtual void  v110(); // _ZN7S8663C14v110Ev
  virtual void  v111(); // _ZN7S8663C14v111Ev
  virtual void  v112(); // _ZN7S8663C14v112Ev
  virtual void  v113(); // _ZN7S8663C14v113Ev
  virtual void  v114(); // _ZN7S8663C14v114Ev
  virtual void  v115(); // _ZN7S8663C14v115Ev
  virtual void  v116(); // _ZN7S8663C14v116Ev
  virtual void  v117(); // _ZN7S8663C14v117Ev
  virtual void  v118(); // _ZN7S8663C14v118Ev
  virtual void  v119(); // _ZN7S8663C14v119Ev
  virtual void  v120(); // _ZN7S8663C14v120Ev
  virtual void  v121(); // _ZN7S8663C14v121Ev
  virtual void  v122(); // _ZN7S8663C14v122Ev
  virtual void  v123(); // _ZN7S8663C14v123Ev
  virtual void  v124(); // _ZN7S8663C14v124Ev
  virtual void  v125(); // _ZN7S8663C14v125Ev
  virtual void  v126(); // _ZN7S8663C14v126Ev
  virtual void  v127(); // _ZN7S8663C14v127Ev
  virtual void  v128(); // _ZN7S8663C14v128Ev
  virtual void  v129(); // _ZN7S8663C14v129Ev
  virtual void  v130(); // _ZN7S8663C14v130Ev
  virtual void  v131(); // _ZN7S8663C14v131Ev
  virtual void  v132(); // _ZN7S8663C14v132Ev
  virtual void  v133(); // _ZN7S8663C14v133Ev
  virtual void  v134(); // _ZN7S8663C14v134Ev
  virtual void  v135(); // _ZN7S8663C14v135Ev
  virtual void  v136(); // _ZN7S8663C14v136Ev
  virtual void  v137(); // _ZN7S8663C14v137Ev
  virtual void  v138(); // _ZN7S8663C14v138Ev
  virtual void  v139(); // _ZN7S8663C14v139Ev
  virtual void  v140(); // _ZN7S8663C14v140Ev
  virtual void  v141(); // _ZN7S8663C14v141Ev
  virtual void  v142(); // _ZN7S8663C14v142Ev
  virtual void  v143(); // _ZN7S8663C14v143Ev
  virtual void  v144(); // _ZN7S8663C14v144Ev
  virtual void  v145(); // _ZN7S8663C14v145Ev
  virtual void  v146(); // _ZN7S8663C14v146Ev
  virtual void  v147(); // _ZN7S8663C14v147Ev
  virtual void  v148(); // _ZN7S8663C14v148Ev
  virtual void  v149(); // _ZN7S8663C14v149Ev
  virtual void  v150(); // _ZN7S8663C14v150Ev
  virtual void  v151(); // _ZN7S8663C14v151Ev
  virtual void  v152(); // _ZN7S8663C14v152Ev
  virtual void  v153(); // _ZN7S8663C14v153Ev
  virtual void  v154(); // _ZN7S8663C14v154Ev
  virtual void  v155(); // _ZN7S8663C14v155Ev
  virtual void  v156(); // _ZN7S8663C14v156Ev
  virtual void  v157(); // _ZN7S8663C14v157Ev
  virtual void  v158(); // _ZN7S8663C14v158Ev
  virtual void  v159(); // _ZN7S8663C14v159Ev
  virtual void  v160(); // _ZN7S8663C14v160Ev
  virtual void  v161(); // _ZN7S8663C14v161Ev
  virtual void  v162(); // _ZN7S8663C14v162Ev
  virtual void  v163(); // _ZN7S8663C14v163Ev
  virtual void  v164(); // _ZN7S8663C14v164Ev
  virtual void  v165(); // _ZN7S8663C14v165Ev
  virtual void  v166(); // _ZN7S8663C14v166Ev
  virtual void  v167(); // _ZN7S8663C14v167Ev
  virtual void  v168(); // _ZN7S8663C14v168Ev
  virtual void  v169(); // _ZN7S8663C14v169Ev
  virtual void  v170(); // _ZN7S8663C14v170Ev
  virtual void  v171(); // _ZN7S8663C14v171Ev
  virtual void  v172(); // _ZN7S8663C14v172Ev
  virtual void  v173(); // _ZN7S8663C14v173Ev
  virtual void  v174(); // _ZN7S8663C14v174Ev
  virtual void  v175(); // _ZN7S8663C14v175Ev
  virtual void  v176(); // _ZN7S8663C14v176Ev
  virtual void  v177(); // _ZN7S8663C14v177Ev
  virtual void  v178(); // _ZN7S8663C14v178Ev
  virtual void  v179(); // _ZN7S8663C14v179Ev
  virtual void  v180(); // _ZN7S8663C14v180Ev
  virtual void  v181(); // _ZN7S8663C14v181Ev
  virtual void  v182(); // _ZN7S8663C14v182Ev
  virtual void  v183(); // _ZN7S8663C14v183Ev
  virtual void  v184(); // _ZN7S8663C14v184Ev
  virtual void  v185(); // _ZN7S8663C14v185Ev
  virtual void  v186(); // _ZN7S8663C14v186Ev
  S8663C1(); // tgen
};
//SIG(1 S8663C1) C1{ BC2{ vd v187 v188 v189 v190 v191 v192 v193 v194 v195 v196 v197 v198 v199 v200 v201 v202 v203 v204 v205 v206 v207 v208 v209 v210 v211 v212 v213 v214 v215 v216 v217 v218 v219 v220 v221 v222 v223 v224 v225 v226 v227 v228 v229 v230 v231 v232 v233 v234 v235 v236 v237 v238 v239 v240 v241 v242 v243 v244 v245 v246 v247 v248 v249 v250 v251 v252 v253 v254 v255 v256 v257 v258 v259 v260 v261 v262 v263 v264 v265 v266 v267 v268 v269 v270 v271 v272 v273 v274 v275 v276 v277 v278 v279 v280 v281 v282 v283 v284 v285 v286 v287 v288 v289 v290 v291 v292 v293 v294 v295 v296 v297 v298 v299 v300 v301 v302 v303 v304 v305 v306 v307 v308 v309 v310 v311 v312 v313 v314 v315 v316 v317 v318 v319 v320 v321 v322 v323 v324 v325 v326 v327 v328 v329 v330 v331 v332 v333 v334 v335 v336 v337 v338 v339 v340 v341 v342 v343 v344 v345 v346 v347 v348 v349 v350 v351 v352 v353 v354 v355 v356 v357 v358 v359 v360 v361 v362 v363 v364 v365 v366 v367 v368 v369 v370 v371} BC3{ vd m FC4{ m Fp Fi[2] FC5{ m}}} BC6{ vd v372} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 v120 v121 v122 v123 v124 v125 v126 v127 v128 v129 v130 v131 v132 v133 v134 v135 v136 v137 v138 v139 v140 v141 v142 v143 v144 v145 v146 v147 v148 v149 v150 v151 v152 v153 v154 v155 v156 v157 v158 v159 v160 v161 v162 v163 v164 v165 v166 v167 v168 v169 v170 v171 v172 v173 v174 v175 v176 v177 v178 v179 v180 v181 v182 v183 v184 v185 v186 Fp[17] FC7{ vd v373 v374 FC4 FC8{ m Fi[4]}[3] Fp[2] Fi Fc}}


 S8663C1 ::~S8663C1(){ note_dtor("S8663C1", this);}
void  S8663C1 ::v1(){vfunc_called(this, "_ZN7S8663C12v1Ev");}
void  S8663C1 ::v2(){vfunc_called(this, "_ZN7S8663C12v2Ev");}
void  S8663C1 ::v3(){vfunc_called(this, "_ZN7S8663C12v3Ev");}
void  S8663C1 ::v4(){vfunc_called(this, "_ZN7S8663C12v4Ev");}
void  S8663C1 ::v5(){vfunc_called(this, "_ZN7S8663C12v5Ev");}
void  S8663C1 ::v6(){vfunc_called(this, "_ZN7S8663C12v6Ev");}
void  S8663C1 ::v7(){vfunc_called(this, "_ZN7S8663C12v7Ev");}
void  S8663C1 ::v8(){vfunc_called(this, "_ZN7S8663C12v8Ev");}
void  S8663C1 ::v9(){vfunc_called(this, "_ZN7S8663C12v9Ev");}
void  S8663C1 ::v10(){vfunc_called(this, "_ZN7S8663C13v10Ev");}
void  S8663C1 ::v11(){vfunc_called(this, "_ZN7S8663C13v11Ev");}
void  S8663C1 ::v12(){vfunc_called(this, "_ZN7S8663C13v12Ev");}
void  S8663C1 ::v13(){vfunc_called(this, "_ZN7S8663C13v13Ev");}
void  S8663C1 ::v14(){vfunc_called(this, "_ZN7S8663C13v14Ev");}
void  S8663C1 ::v15(){vfunc_called(this, "_ZN7S8663C13v15Ev");}
void  S8663C1 ::v16(){vfunc_called(this, "_ZN7S8663C13v16Ev");}
void  S8663C1 ::v17(){vfunc_called(this, "_ZN7S8663C13v17Ev");}
void  S8663C1 ::v18(){vfunc_called(this, "_ZN7S8663C13v18Ev");}
void  S8663C1 ::v19(){vfunc_called(this, "_ZN7S8663C13v19Ev");}
void  S8663C1 ::v20(){vfunc_called(this, "_ZN7S8663C13v20Ev");}
void  S8663C1 ::v21(){vfunc_called(this, "_ZN7S8663C13v21Ev");}
void  S8663C1 ::v22(){vfunc_called(this, "_ZN7S8663C13v22Ev");}
void  S8663C1 ::v23(){vfunc_called(this, "_ZN7S8663C13v23Ev");}
void  S8663C1 ::v24(){vfunc_called(this, "_ZN7S8663C13v24Ev");}
void  S8663C1 ::v25(){vfunc_called(this, "_ZN7S8663C13v25Ev");}
void  S8663C1 ::v26(){vfunc_called(this, "_ZN7S8663C13v26Ev");}
void  S8663C1 ::v27(){vfunc_called(this, "_ZN7S8663C13v27Ev");}
void  S8663C1 ::v28(){vfunc_called(this, "_ZN7S8663C13v28Ev");}
void  S8663C1 ::v29(){vfunc_called(this, "_ZN7S8663C13v29Ev");}
void  S8663C1 ::v30(){vfunc_called(this, "_ZN7S8663C13v30Ev");}
void  S8663C1 ::v31(){vfunc_called(this, "_ZN7S8663C13v31Ev");}
void  S8663C1 ::v32(){vfunc_called(this, "_ZN7S8663C13v32Ev");}
void  S8663C1 ::v33(){vfunc_called(this, "_ZN7S8663C13v33Ev");}
void  S8663C1 ::v34(){vfunc_called(this, "_ZN7S8663C13v34Ev");}
void  S8663C1 ::v35(){vfunc_called(this, "_ZN7S8663C13v35Ev");}
void  S8663C1 ::v36(){vfunc_called(this, "_ZN7S8663C13v36Ev");}
void  S8663C1 ::v37(){vfunc_called(this, "_ZN7S8663C13v37Ev");}
void  S8663C1 ::v38(){vfunc_called(this, "_ZN7S8663C13v38Ev");}
void  S8663C1 ::v39(){vfunc_called(this, "_ZN7S8663C13v39Ev");}
void  S8663C1 ::v40(){vfunc_called(this, "_ZN7S8663C13v40Ev");}
void  S8663C1 ::v41(){vfunc_called(this, "_ZN7S8663C13v41Ev");}
void  S8663C1 ::v42(){vfunc_called(this, "_ZN7S8663C13v42Ev");}
void  S8663C1 ::v43(){vfunc_called(this, "_ZN7S8663C13v43Ev");}
void  S8663C1 ::v44(){vfunc_called(this, "_ZN7S8663C13v44Ev");}
void  S8663C1 ::v45(){vfunc_called(this, "_ZN7S8663C13v45Ev");}
void  S8663C1 ::v46(){vfunc_called(this, "_ZN7S8663C13v46Ev");}
void  S8663C1 ::v47(){vfunc_called(this, "_ZN7S8663C13v47Ev");}
void  S8663C1 ::v48(){vfunc_called(this, "_ZN7S8663C13v48Ev");}
void  S8663C1 ::v49(){vfunc_called(this, "_ZN7S8663C13v49Ev");}
void  S8663C1 ::v50(){vfunc_called(this, "_ZN7S8663C13v50Ev");}
void  S8663C1 ::v51(){vfunc_called(this, "_ZN7S8663C13v51Ev");}
void  S8663C1 ::v52(){vfunc_called(this, "_ZN7S8663C13v52Ev");}
void  S8663C1 ::v53(){vfunc_called(this, "_ZN7S8663C13v53Ev");}
void  S8663C1 ::v54(){vfunc_called(this, "_ZN7S8663C13v54Ev");}
void  S8663C1 ::v55(){vfunc_called(this, "_ZN7S8663C13v55Ev");}
void  S8663C1 ::v56(){vfunc_called(this, "_ZN7S8663C13v56Ev");}
void  S8663C1 ::v57(){vfunc_called(this, "_ZN7S8663C13v57Ev");}
void  S8663C1 ::v58(){vfunc_called(this, "_ZN7S8663C13v58Ev");}
void  S8663C1 ::v59(){vfunc_called(this, "_ZN7S8663C13v59Ev");}
void  S8663C1 ::v60(){vfunc_called(this, "_ZN7S8663C13v60Ev");}
void  S8663C1 ::v61(){vfunc_called(this, "_ZN7S8663C13v61Ev");}
void  S8663C1 ::v62(){vfunc_called(this, "_ZN7S8663C13v62Ev");}
void  S8663C1 ::v63(){vfunc_called(this, "_ZN7S8663C13v63Ev");}
void  S8663C1 ::v64(){vfunc_called(this, "_ZN7S8663C13v64Ev");}
void  S8663C1 ::v65(){vfunc_called(this, "_ZN7S8663C13v65Ev");}
void  S8663C1 ::v66(){vfunc_called(this, "_ZN7S8663C13v66Ev");}
void  S8663C1 ::v67(){vfunc_called(this, "_ZN7S8663C13v67Ev");}
void  S8663C1 ::v68(){vfunc_called(this, "_ZN7S8663C13v68Ev");}
void  S8663C1 ::v69(){vfunc_called(this, "_ZN7S8663C13v69Ev");}
void  S8663C1 ::v70(){vfunc_called(this, "_ZN7S8663C13v70Ev");}
void  S8663C1 ::v71(){vfunc_called(this, "_ZN7S8663C13v71Ev");}
void  S8663C1 ::v72(){vfunc_called(this, "_ZN7S8663C13v72Ev");}
void  S8663C1 ::v73(){vfunc_called(this, "_ZN7S8663C13v73Ev");}
void  S8663C1 ::v74(){vfunc_called(this, "_ZN7S8663C13v74Ev");}
void  S8663C1 ::v75(){vfunc_called(this, "_ZN7S8663C13v75Ev");}
void  S8663C1 ::v76(){vfunc_called(this, "_ZN7S8663C13v76Ev");}
void  S8663C1 ::v77(){vfunc_called(this, "_ZN7S8663C13v77Ev");}
void  S8663C1 ::v78(){vfunc_called(this, "_ZN7S8663C13v78Ev");}
void  S8663C1 ::v79(){vfunc_called(this, "_ZN7S8663C13v79Ev");}
void  S8663C1 ::v80(){vfunc_called(this, "_ZN7S8663C13v80Ev");}
void  S8663C1 ::v81(){vfunc_called(this, "_ZN7S8663C13v81Ev");}
void  S8663C1 ::v82(){vfunc_called(this, "_ZN7S8663C13v82Ev");}
void  S8663C1 ::v83(){vfunc_called(this, "_ZN7S8663C13v83Ev");}
void  S8663C1 ::v84(){vfunc_called(this, "_ZN7S8663C13v84Ev");}
void  S8663C1 ::v85(){vfunc_called(this, "_ZN7S8663C13v85Ev");}
void  S8663C1 ::v86(){vfunc_called(this, "_ZN7S8663C13v86Ev");}
void  S8663C1 ::v87(){vfunc_called(this, "_ZN7S8663C13v87Ev");}
void  S8663C1 ::v88(){vfunc_called(this, "_ZN7S8663C13v88Ev");}
void  S8663C1 ::v89(){vfunc_called(this, "_ZN7S8663C13v89Ev");}
void  S8663C1 ::v90(){vfunc_called(this, "_ZN7S8663C13v90Ev");}
void  S8663C1 ::v91(){vfunc_called(this, "_ZN7S8663C13v91Ev");}
void  S8663C1 ::v92(){vfunc_called(this, "_ZN7S8663C13v92Ev");}
void  S8663C1 ::v93(){vfunc_called(this, "_ZN7S8663C13v93Ev");}
void  S8663C1 ::v94(){vfunc_called(this, "_ZN7S8663C13v94Ev");}
void  S8663C1 ::v95(){vfunc_called(this, "_ZN7S8663C13v95Ev");}
void  S8663C1 ::v96(){vfunc_called(this, "_ZN7S8663C13v96Ev");}
void  S8663C1 ::v97(){vfunc_called(this, "_ZN7S8663C13v97Ev");}
void  S8663C1 ::v98(){vfunc_called(this, "_ZN7S8663C13v98Ev");}
void  S8663C1 ::v99(){vfunc_called(this, "_ZN7S8663C13v99Ev");}
void  S8663C1 ::v100(){vfunc_called(this, "_ZN7S8663C14v100Ev");}
void  S8663C1 ::v101(){vfunc_called(this, "_ZN7S8663C14v101Ev");}
void  S8663C1 ::v102(){vfunc_called(this, "_ZN7S8663C14v102Ev");}
void  S8663C1 ::v103(){vfunc_called(this, "_ZN7S8663C14v103Ev");}
void  S8663C1 ::v104(){vfunc_called(this, "_ZN7S8663C14v104Ev");}
void  S8663C1 ::v105(){vfunc_called(this, "_ZN7S8663C14v105Ev");}
void  S8663C1 ::v106(){vfunc_called(this, "_ZN7S8663C14v106Ev");}
void  S8663C1 ::v107(){vfunc_called(this, "_ZN7S8663C14v107Ev");}
void  S8663C1 ::v108(){vfunc_called(this, "_ZN7S8663C14v108Ev");}
void  S8663C1 ::v109(){vfunc_called(this, "_ZN7S8663C14v109Ev");}
void  S8663C1 ::v110(){vfunc_called(this, "_ZN7S8663C14v110Ev");}
void  S8663C1 ::v111(){vfunc_called(this, "_ZN7S8663C14v111Ev");}
void  S8663C1 ::v112(){vfunc_called(this, "_ZN7S8663C14v112Ev");}
void  S8663C1 ::v113(){vfunc_called(this, "_ZN7S8663C14v113Ev");}
void  S8663C1 ::v114(){vfunc_called(this, "_ZN7S8663C14v114Ev");}
void  S8663C1 ::v115(){vfunc_called(this, "_ZN7S8663C14v115Ev");}
void  S8663C1 ::v116(){vfunc_called(this, "_ZN7S8663C14v116Ev");}
void  S8663C1 ::v117(){vfunc_called(this, "_ZN7S8663C14v117Ev");}
void  S8663C1 ::v118(){vfunc_called(this, "_ZN7S8663C14v118Ev");}
void  S8663C1 ::v119(){vfunc_called(this, "_ZN7S8663C14v119Ev");}
void  S8663C1 ::v120(){vfunc_called(this, "_ZN7S8663C14v120Ev");}
void  S8663C1 ::v121(){vfunc_called(this, "_ZN7S8663C14v121Ev");}
void  S8663C1 ::v122(){vfunc_called(this, "_ZN7S8663C14v122Ev");}
void  S8663C1 ::v123(){vfunc_called(this, "_ZN7S8663C14v123Ev");}
void  S8663C1 ::v124(){vfunc_called(this, "_ZN7S8663C14v124Ev");}
void  S8663C1 ::v125(){vfunc_called(this, "_ZN7S8663C14v125Ev");}
void  S8663C1 ::v126(){vfunc_called(this, "_ZN7S8663C14v126Ev");}
void  S8663C1 ::v127(){vfunc_called(this, "_ZN7S8663C14v127Ev");}
void  S8663C1 ::v128(){vfunc_called(this, "_ZN7S8663C14v128Ev");}
void  S8663C1 ::v129(){vfunc_called(this, "_ZN7S8663C14v129Ev");}
void  S8663C1 ::v130(){vfunc_called(this, "_ZN7S8663C14v130Ev");}
void  S8663C1 ::v131(){vfunc_called(this, "_ZN7S8663C14v131Ev");}
void  S8663C1 ::v132(){vfunc_called(this, "_ZN7S8663C14v132Ev");}
void  S8663C1 ::v133(){vfunc_called(this, "_ZN7S8663C14v133Ev");}
void  S8663C1 ::v134(){vfunc_called(this, "_ZN7S8663C14v134Ev");}
void  S8663C1 ::v135(){vfunc_called(this, "_ZN7S8663C14v135Ev");}
void  S8663C1 ::v136(){vfunc_called(this, "_ZN7S8663C14v136Ev");}
void  S8663C1 ::v137(){vfunc_called(this, "_ZN7S8663C14v137Ev");}
void  S8663C1 ::v138(){vfunc_called(this, "_ZN7S8663C14v138Ev");}
void  S8663C1 ::v139(){vfunc_called(this, "_ZN7S8663C14v139Ev");}
void  S8663C1 ::v140(){vfunc_called(this, "_ZN7S8663C14v140Ev");}
void  S8663C1 ::v141(){vfunc_called(this, "_ZN7S8663C14v141Ev");}
void  S8663C1 ::v142(){vfunc_called(this, "_ZN7S8663C14v142Ev");}
void  S8663C1 ::v143(){vfunc_called(this, "_ZN7S8663C14v143Ev");}
void  S8663C1 ::v144(){vfunc_called(this, "_ZN7S8663C14v144Ev");}
void  S8663C1 ::v145(){vfunc_called(this, "_ZN7S8663C14v145Ev");}
void  S8663C1 ::v146(){vfunc_called(this, "_ZN7S8663C14v146Ev");}
void  S8663C1 ::v147(){vfunc_called(this, "_ZN7S8663C14v147Ev");}
void  S8663C1 ::v148(){vfunc_called(this, "_ZN7S8663C14v148Ev");}
void  S8663C1 ::v149(){vfunc_called(this, "_ZN7S8663C14v149Ev");}
void  S8663C1 ::v150(){vfunc_called(this, "_ZN7S8663C14v150Ev");}
void  S8663C1 ::v151(){vfunc_called(this, "_ZN7S8663C14v151Ev");}
void  S8663C1 ::v152(){vfunc_called(this, "_ZN7S8663C14v152Ev");}
void  S8663C1 ::v153(){vfunc_called(this, "_ZN7S8663C14v153Ev");}
void  S8663C1 ::v154(){vfunc_called(this, "_ZN7S8663C14v154Ev");}
void  S8663C1 ::v155(){vfunc_called(this, "_ZN7S8663C14v155Ev");}
void  S8663C1 ::v156(){vfunc_called(this, "_ZN7S8663C14v156Ev");}
void  S8663C1 ::v157(){vfunc_called(this, "_ZN7S8663C14v157Ev");}
void  S8663C1 ::v158(){vfunc_called(this, "_ZN7S8663C14v158Ev");}
void  S8663C1 ::v159(){vfunc_called(this, "_ZN7S8663C14v159Ev");}
void  S8663C1 ::v160(){vfunc_called(this, "_ZN7S8663C14v160Ev");}
void  S8663C1 ::v161(){vfunc_called(this, "_ZN7S8663C14v161Ev");}
void  S8663C1 ::v162(){vfunc_called(this, "_ZN7S8663C14v162Ev");}
void  S8663C1 ::v163(){vfunc_called(this, "_ZN7S8663C14v163Ev");}
void  S8663C1 ::v164(){vfunc_called(this, "_ZN7S8663C14v164Ev");}
void  S8663C1 ::v165(){vfunc_called(this, "_ZN7S8663C14v165Ev");}
void  S8663C1 ::v166(){vfunc_called(this, "_ZN7S8663C14v166Ev");}
void  S8663C1 ::v167(){vfunc_called(this, "_ZN7S8663C14v167Ev");}
void  S8663C1 ::v168(){vfunc_called(this, "_ZN7S8663C14v168Ev");}
void  S8663C1 ::v169(){vfunc_called(this, "_ZN7S8663C14v169Ev");}
void  S8663C1 ::v170(){vfunc_called(this, "_ZN7S8663C14v170Ev");}
void  S8663C1 ::v171(){vfunc_called(this, "_ZN7S8663C14v171Ev");}
void  S8663C1 ::v172(){vfunc_called(this, "_ZN7S8663C14v172Ev");}
void  S8663C1 ::v173(){vfunc_called(this, "_ZN7S8663C14v173Ev");}
void  S8663C1 ::v174(){vfunc_called(this, "_ZN7S8663C14v174Ev");}
void  S8663C1 ::v175(){vfunc_called(this, "_ZN7S8663C14v175Ev");}
void  S8663C1 ::v176(){vfunc_called(this, "_ZN7S8663C14v176Ev");}
void  S8663C1 ::v177(){vfunc_called(this, "_ZN7S8663C14v177Ev");}
void  S8663C1 ::v178(){vfunc_called(this, "_ZN7S8663C14v178Ev");}
void  S8663C1 ::v179(){vfunc_called(this, "_ZN7S8663C14v179Ev");}
void  S8663C1 ::v180(){vfunc_called(this, "_ZN7S8663C14v180Ev");}
void  S8663C1 ::v181(){vfunc_called(this, "_ZN7S8663C14v181Ev");}
void  S8663C1 ::v182(){vfunc_called(this, "_ZN7S8663C14v182Ev");}
void  S8663C1 ::v183(){vfunc_called(this, "_ZN7S8663C14v183Ev");}
void  S8663C1 ::v184(){vfunc_called(this, "_ZN7S8663C14v184Ev");}
void  S8663C1 ::v185(){vfunc_called(this, "_ZN7S8663C14v185Ev");}
void  S8663C1 ::v186(){vfunc_called(this, "_ZN7S8663C14v186Ev");}
S8663C1 ::S8663C1(){ note_ctor("S8663C1", this);} // tgen

static void Test_S8663C1()
{
  extern Class_Descriptor cd_S8663C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,46)];
    init_test(&cd_S8663C1, buf);
    S8663C1 *dp, &lv = *(dp=new (buf) S8663C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,180), "sizeof(S8663C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8663C1)");
    check_base_class_offset(lv, (S8663C2*), 0, "S8663C1");
    check_base_class_offset(lv, (S8663C3*), ABISELECT(8,4), "S8663C1");
    check_base_class_offset(lv, (S8663C6_nt*), ABISELECT(40,24), "S8663C1");
    check_field_offset(lv, s8663c1f0, ABISELECT(48,28), "S8663C1.s8663c1f0");
    check_field_offset(lv, s8663c1f1, ABISELECT(184,96), "S8663C1.s8663c1f1");
    test_class_info(&lv, &cd_S8663C1);
    dp->~S8663C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8663C1(Test_S8663C1, "S8663C1", ABISELECT(288,180));

#else // __cplusplus

extern void _ZN7S8663C1C1Ev();
extern void _ZN7S8663C1D1Ev();
Name_Map name_map_S8663C1[] = {
  NSPAIR(_ZN7S8663C1C1Ev),
  NSPAIR(_ZN7S8663C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8663C2;
extern VTBL_ENTRY _ZTI7S8663C2[];
extern  VTBL_ENTRY _ZTV7S8663C2[];
extern Class_Descriptor cd_S8663C3;
extern VTBL_ENTRY _ZTI7S8663C3[];
extern  VTBL_ENTRY _ZTV7S8663C3[];
extern Class_Descriptor cd_S8663C6_nt;
extern VTBL_ENTRY _ZTI10S8663C6_nt[];
extern  VTBL_ENTRY _ZTV10S8663C6_nt[];
static Base_Class bases_S8663C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8663C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S8663C3,    ABISELECT(8,4), //bcp->offset
    375, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S8663C6_nt,    ABISELECT(40,24), //bcp->offset
    379, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8663C1[];
extern void _ZN7S8663C1D1Ev();
extern void _ZN7S8663C1D0Ev();
extern void _ZN7S8663C24v187Ev();
extern void _ZN7S8663C24v188Ev();
extern void _ZN7S8663C24v189Ev();
extern void _ZN7S8663C24v190Ev();
extern void _ZN7S8663C24v191Ev();
extern void _ZN7S8663C24v192Ev();
extern void _ZN7S8663C24v193Ev();
extern void _ZN7S8663C24v194Ev();
extern void _ZN7S8663C24v195Ev();
extern void _ZN7S8663C24v196Ev();
extern void _ZN7S8663C24v197Ev();
extern void _ZN7S8663C24v198Ev();
extern void _ZN7S8663C24v199Ev();
extern void _ZN7S8663C24v200Ev();
extern void _ZN7S8663C24v201Ev();
extern void _ZN7S8663C24v202Ev();
extern void _ZN7S8663C24v203Ev();
extern void _ZN7S8663C24v204Ev();
extern void _ZN7S8663C24v205Ev();
extern void _ZN7S8663C24v206Ev();
extern void _ZN7S8663C24v207Ev();
extern void _ZN7S8663C24v208Ev();
extern void _ZN7S8663C24v209Ev();
extern void _ZN7S8663C24v210Ev();
extern void _ZN7S8663C24v211Ev();
extern void _ZN7S8663C24v212Ev();
extern void _ZN7S8663C24v213Ev();
extern void _ZN7S8663C24v214Ev();
extern void _ZN7S8663C24v215Ev();
extern void _ZN7S8663C24v216Ev();
extern void _ZN7S8663C24v217Ev();
extern void _ZN7S8663C24v218Ev();
extern void _ZN7S8663C24v219Ev();
extern void _ZN7S8663C24v220Ev();
extern void _ZN7S8663C24v221Ev();
extern void _ZN7S8663C24v222Ev();
extern void _ZN7S8663C24v223Ev();
extern void _ZN7S8663C24v224Ev();
extern void _ZN7S8663C24v225Ev();
extern void _ZN7S8663C24v226Ev();
extern void _ZN7S8663C24v227Ev();
extern void _ZN7S8663C24v228Ev();
extern void _ZN7S8663C24v229Ev();
extern void _ZN7S8663C24v230Ev();
extern void _ZN7S8663C24v231Ev();
extern void _ZN7S8663C24v232Ev();
extern void _ZN7S8663C24v233Ev();
extern void _ZN7S8663C24v234Ev();
extern void _ZN7S8663C24v235Ev();
extern void _ZN7S8663C24v236Ev();
extern void _ZN7S8663C24v237Ev();
extern void _ZN7S8663C24v238Ev();
extern void _ZN7S8663C24v239Ev();
extern void _ZN7S8663C24v240Ev();
extern void _ZN7S8663C24v241Ev();
extern void _ZN7S8663C24v242Ev();
extern void _ZN7S8663C24v243Ev();
extern void _ZN7S8663C24v244Ev();
extern void _ZN7S8663C24v245Ev();
extern void _ZN7S8663C24v246Ev();
extern void _ZN7S8663C24v247Ev();
extern void _ZN7S8663C24v248Ev();
extern void _ZN7S8663C24v249Ev();
extern void _ZN7S8663C24v250Ev();
extern void _ZN7S8663C24v251Ev();
extern void _ZN7S8663C24v252Ev();
extern void _ZN7S8663C24v253Ev();
extern void _ZN7S8663C24v254Ev();
extern void _ZN7S8663C24v255Ev();
extern void _ZN7S8663C24v256Ev();
extern void _ZN7S8663C24v257Ev();
extern void _ZN7S8663C24v258Ev();
extern void _ZN7S8663C24v259Ev();
extern void _ZN7S8663C24v260Ev();
extern void _ZN7S8663C24v261Ev();
extern void _ZN7S8663C24v262Ev();
extern void _ZN7S8663C24v263Ev();
extern void _ZN7S8663C24v264Ev();
extern void _ZN7S8663C24v265Ev();
extern void _ZN7S8663C24v266Ev();
extern void _ZN7S8663C24v267Ev();
extern void _ZN7S8663C24v268Ev();
extern void _ZN7S8663C24v269Ev();
extern void _ZN7S8663C24v270Ev();
extern void _ZN7S8663C24v271Ev();
extern void _ZN7S8663C24v272Ev();
extern void _ZN7S8663C24v273Ev();
extern void _ZN7S8663C24v274Ev();
extern void _ZN7S8663C24v275Ev();
extern void _ZN7S8663C24v276Ev();
extern void _ZN7S8663C24v277Ev();
extern void _ZN7S8663C24v278Ev();
extern void _ZN7S8663C24v279Ev();
extern void _ZN7S8663C24v280Ev();
extern void _ZN7S8663C24v281Ev();
extern void _ZN7S8663C24v282Ev();
extern void _ZN7S8663C24v283Ev();
extern void _ZN7S8663C24v284Ev();
extern void _ZN7S8663C24v285Ev();
extern void _ZN7S8663C24v286Ev();
extern void _ZN7S8663C24v287Ev();
extern void _ZN7S8663C24v288Ev();
extern void _ZN7S8663C24v289Ev();
extern void _ZN7S8663C24v290Ev();
extern void _ZN7S8663C24v291Ev();
extern void _ZN7S8663C24v292Ev();
extern void _ZN7S8663C24v293Ev();
extern void _ZN7S8663C24v294Ev();
extern void _ZN7S8663C24v295Ev();
extern void _ZN7S8663C24v296Ev();
extern void _ZN7S8663C24v297Ev();
extern void _ZN7S8663C24v298Ev();
extern void _ZN7S8663C24v299Ev();
extern void _ZN7S8663C24v300Ev();
extern void _ZN7S8663C24v301Ev();
extern void _ZN7S8663C24v302Ev();
extern void _ZN7S8663C24v303Ev();
extern void _ZN7S8663C24v304Ev();
extern void _ZN7S8663C24v305Ev();
extern void _ZN7S8663C24v306Ev();
extern void _ZN7S8663C24v307Ev();
extern void _ZN7S8663C24v308Ev();
extern void _ZN7S8663C24v309Ev();
extern void _ZN7S8663C24v310Ev();
extern void _ZN7S8663C24v311Ev();
extern void _ZN7S8663C24v312Ev();
extern void _ZN7S8663C24v313Ev();
extern void _ZN7S8663C24v314Ev();
extern void _ZN7S8663C24v315Ev();
extern void _ZN7S8663C24v316Ev();
extern void _ZN7S8663C24v317Ev();
extern void _ZN7S8663C24v318Ev();
extern void _ZN7S8663C24v319Ev();
extern void _ZN7S8663C24v320Ev();
extern void _ZN7S8663C24v321Ev();
extern void _ZN7S8663C24v322Ev();
extern void _ZN7S8663C24v323Ev();
extern void _ZN7S8663C24v324Ev();
extern void _ZN7S8663C24v325Ev();
extern void _ZN7S8663C24v326Ev();
extern void _ZN7S8663C24v327Ev();
extern void _ZN7S8663C24v328Ev();
extern void _ZN7S8663C24v329Ev();
extern void _ZN7S8663C24v330Ev();
extern void _ZN7S8663C24v331Ev();
extern void _ZN7S8663C24v332Ev();
extern void _ZN7S8663C24v333Ev();
extern void _ZN7S8663C24v334Ev();
extern void _ZN7S8663C24v335Ev();
extern void _ZN7S8663C24v336Ev();
extern void _ZN7S8663C24v337Ev();
extern void _ZN7S8663C24v338Ev();
extern void _ZN7S8663C24v339Ev();
extern void _ZN7S8663C24v340Ev();
extern void _ZN7S8663C24v341Ev();
extern void _ZN7S8663C24v342Ev();
extern void _ZN7S8663C24v343Ev();
extern void _ZN7S8663C24v344Ev();
extern void _ZN7S8663C24v345Ev();
extern void _ZN7S8663C24v346Ev();
extern void _ZN7S8663C24v347Ev();
extern void _ZN7S8663C24v348Ev();
extern void _ZN7S8663C24v349Ev();
extern void _ZN7S8663C24v350Ev();
extern void _ZN7S8663C24v351Ev();
extern void _ZN7S8663C24v352Ev();
extern void _ZN7S8663C24v353Ev();
extern void _ZN7S8663C24v354Ev();
extern void _ZN7S8663C24v355Ev();
extern void _ZN7S8663C24v356Ev();
extern void _ZN7S8663C24v357Ev();
extern void _ZN7S8663C24v358Ev();
extern void _ZN7S8663C24v359Ev();
extern void _ZN7S8663C24v360Ev();
extern void _ZN7S8663C24v361Ev();
extern void _ZN7S8663C24v362Ev();
extern void _ZN7S8663C24v363Ev();
extern void _ZN7S8663C24v364Ev();
extern void _ZN7S8663C24v365Ev();
extern void _ZN7S8663C24v366Ev();
extern void _ZN7S8663C24v367Ev();
extern void _ZN7S8663C24v368Ev();
extern void _ZN7S8663C24v369Ev();
extern void _ZN7S8663C24v370Ev();
extern void _ZN7S8663C24v371Ev();
extern void _ZN7S8663C12v1Ev();
extern void _ZN7S8663C12v2Ev();
extern void _ZN7S8663C12v3Ev();
extern void _ZN7S8663C12v4Ev();
extern void _ZN7S8663C12v5Ev();
extern void _ZN7S8663C12v6Ev();
extern void _ZN7S8663C12v7Ev();
extern void _ZN7S8663C12v8Ev();
extern void _ZN7S8663C12v9Ev();
extern void _ZN7S8663C13v10Ev();
extern void _ZN7S8663C13v11Ev();
extern void _ZN7S8663C13v12Ev();
extern void _ZN7S8663C13v13Ev();
extern void _ZN7S8663C13v14Ev();
extern void _ZN7S8663C13v15Ev();
extern void _ZN7S8663C13v16Ev();
extern void _ZN7S8663C13v17Ev();
extern void _ZN7S8663C13v18Ev();
extern void _ZN7S8663C13v19Ev();
extern void _ZN7S8663C13v20Ev();
extern void _ZN7S8663C13v21Ev();
extern void _ZN7S8663C13v22Ev();
extern void _ZN7S8663C13v23Ev();
extern void _ZN7S8663C13v24Ev();
extern void _ZN7S8663C13v25Ev();
extern void _ZN7S8663C13v26Ev();
extern void _ZN7S8663C13v27Ev();
extern void _ZN7S8663C13v28Ev();
extern void _ZN7S8663C13v29Ev();
extern void _ZN7S8663C13v30Ev();
extern void _ZN7S8663C13v31Ev();
extern void _ZN7S8663C13v32Ev();
extern void _ZN7S8663C13v33Ev();
extern void _ZN7S8663C13v34Ev();
extern void _ZN7S8663C13v35Ev();
extern void _ZN7S8663C13v36Ev();
extern void _ZN7S8663C13v37Ev();
extern void _ZN7S8663C13v38Ev();
extern void _ZN7S8663C13v39Ev();
extern void _ZN7S8663C13v40Ev();
extern void _ZN7S8663C13v41Ev();
extern void _ZN7S8663C13v42Ev();
extern void _ZN7S8663C13v43Ev();
extern void _ZN7S8663C13v44Ev();
extern void _ZN7S8663C13v45Ev();
extern void _ZN7S8663C13v46Ev();
extern void _ZN7S8663C13v47Ev();
extern void _ZN7S8663C13v48Ev();
extern void _ZN7S8663C13v49Ev();
extern void _ZN7S8663C13v50Ev();
extern void _ZN7S8663C13v51Ev();
extern void _ZN7S8663C13v52Ev();
extern void _ZN7S8663C13v53Ev();
extern void _ZN7S8663C13v54Ev();
extern void _ZN7S8663C13v55Ev();
extern void _ZN7S8663C13v56Ev();
extern void _ZN7S8663C13v57Ev();
extern void _ZN7S8663C13v58Ev();
extern void _ZN7S8663C13v59Ev();
extern void _ZN7S8663C13v60Ev();
extern void _ZN7S8663C13v61Ev();
extern void _ZN7S8663C13v62Ev();
extern void _ZN7S8663C13v63Ev();
extern void _ZN7S8663C13v64Ev();
extern void _ZN7S8663C13v65Ev();
extern void _ZN7S8663C13v66Ev();
extern void _ZN7S8663C13v67Ev();
extern void _ZN7S8663C13v68Ev();
extern void _ZN7S8663C13v69Ev();
extern void _ZN7S8663C13v70Ev();
extern void _ZN7S8663C13v71Ev();
extern void _ZN7S8663C13v72Ev();
extern void _ZN7S8663C13v73Ev();
extern void _ZN7S8663C13v74Ev();
extern void _ZN7S8663C13v75Ev();
extern void _ZN7S8663C13v76Ev();
extern void _ZN7S8663C13v77Ev();
extern void _ZN7S8663C13v78Ev();
extern void _ZN7S8663C13v79Ev();
extern void _ZN7S8663C13v80Ev();
extern void _ZN7S8663C13v81Ev();
extern void _ZN7S8663C13v82Ev();
extern void _ZN7S8663C13v83Ev();
extern void _ZN7S8663C13v84Ev();
extern void _ZN7S8663C13v85Ev();
extern void _ZN7S8663C13v86Ev();
extern void _ZN7S8663C13v87Ev();
extern void _ZN7S8663C13v88Ev();
extern void _ZN7S8663C13v89Ev();
extern void _ZN7S8663C13v90Ev();
extern void _ZN7S8663C13v91Ev();
extern void _ZN7S8663C13v92Ev();
extern void _ZN7S8663C13v93Ev();
extern void _ZN7S8663C13v94Ev();
extern void _ZN7S8663C13v95Ev();
extern void _ZN7S8663C13v96Ev();
extern void _ZN7S8663C13v97Ev();
extern void _ZN7S8663C13v98Ev();
extern void _ZN7S8663C13v99Ev();
extern void _ZN7S8663C14v100Ev();
extern void _ZN7S8663C14v101Ev();
extern void _ZN7S8663C14v102Ev();
extern void _ZN7S8663C14v103Ev();
extern void _ZN7S8663C14v104Ev();
extern void _ZN7S8663C14v105Ev();
extern void _ZN7S8663C14v106Ev();
extern void _ZN7S8663C14v107Ev();
extern void _ZN7S8663C14v108Ev();
extern void _ZN7S8663C14v109Ev();
extern void _ZN7S8663C14v110Ev();
extern void _ZN7S8663C14v111Ev();
extern void _ZN7S8663C14v112Ev();
extern void _ZN7S8663C14v113Ev();
extern void _ZN7S8663C14v114Ev();
extern void _ZN7S8663C14v115Ev();
extern void _ZN7S8663C14v116Ev();
extern void _ZN7S8663C14v117Ev();
extern void _ZN7S8663C14v118Ev();
extern void _ZN7S8663C14v119Ev();
extern void _ZN7S8663C14v120Ev();
extern void _ZN7S8663C14v121Ev();
extern void _ZN7S8663C14v122Ev();
extern void _ZN7S8663C14v123Ev();
extern void _ZN7S8663C14v124Ev();
extern void _ZN7S8663C14v125Ev();
extern void _ZN7S8663C14v126Ev();
extern void _ZN7S8663C14v127Ev();
extern void _ZN7S8663C14v128Ev();
extern void _ZN7S8663C14v129Ev();
extern void _ZN7S8663C14v130Ev();
extern void _ZN7S8663C14v131Ev();
extern void _ZN7S8663C14v132Ev();
extern void _ZN7S8663C14v133Ev();
extern void _ZN7S8663C14v134Ev();
extern void _ZN7S8663C14v135Ev();
extern void _ZN7S8663C14v136Ev();
extern void _ZN7S8663C14v137Ev();
extern void _ZN7S8663C14v138Ev();
extern void _ZN7S8663C14v139Ev();
extern void _ZN7S8663C14v140Ev();
extern void _ZN7S8663C14v141Ev();
extern void _ZN7S8663C14v142Ev();
extern void _ZN7S8663C14v143Ev();
extern void _ZN7S8663C14v144Ev();
extern void _ZN7S8663C14v145Ev();
extern void _ZN7S8663C14v146Ev();
extern void _ZN7S8663C14v147Ev();
extern void _ZN7S8663C14v148Ev();
extern void _ZN7S8663C14v149Ev();
extern void _ZN7S8663C14v150Ev();
extern void _ZN7S8663C14v151Ev();
extern void _ZN7S8663C14v152Ev();
extern void _ZN7S8663C14v153Ev();
extern void _ZN7S8663C14v154Ev();
extern void _ZN7S8663C14v155Ev();
extern void _ZN7S8663C14v156Ev();
extern void _ZN7S8663C14v157Ev();
extern void _ZN7S8663C14v158Ev();
extern void _ZN7S8663C14v159Ev();
extern void _ZN7S8663C14v160Ev();
extern void _ZN7S8663C14v161Ev();
extern void _ZN7S8663C14v162Ev();
extern void _ZN7S8663C14v163Ev();
extern void _ZN7S8663C14v164Ev();
extern void _ZN7S8663C14v165Ev();
extern void _ZN7S8663C14v166Ev();
extern void _ZN7S8663C14v167Ev();
extern void _ZN7S8663C14v168Ev();
extern void _ZN7S8663C14v169Ev();
extern void _ZN7S8663C14v170Ev();
extern void _ZN7S8663C14v171Ev();
extern void _ZN7S8663C14v172Ev();
extern void _ZN7S8663C14v173Ev();
extern void _ZN7S8663C14v174Ev();
extern void _ZN7S8663C14v175Ev();
extern void _ZN7S8663C14v176Ev();
extern void _ZN7S8663C14v177Ev();
extern void _ZN7S8663C14v178Ev();
extern void _ZN7S8663C14v179Ev();
extern void _ZN7S8663C14v180Ev();
extern void _ZN7S8663C14v181Ev();
extern void _ZN7S8663C14v182Ev();
extern void _ZN7S8663C14v183Ev();
extern void _ZN7S8663C14v184Ev();
extern void _ZN7S8663C14v185Ev();
extern void _ZN7S8663C14v186Ev();
extern void ABISELECT(_ZThn8_N7S8663C1D1Ev,_ZThn4_N7S8663C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S8663C1D0Ev,_ZThn4_N7S8663C1D0Ev)();
extern void ABISELECT(_ZThn40_N7S8663C1D1Ev,_ZThn24_N7S8663C1D1Ev)();
extern void ABISELECT(_ZThn40_N7S8663C1D0Ev,_ZThn24_N7S8663C1D0Ev)();
extern void _ZN10S8663C6_nt4v372Ev();
static  VTBL_ENTRY vtc_S8663C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8663C1[0]),
  (VTBL_ENTRY)&_ZN7S8663C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8663C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v187Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v188Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v189Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v190Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v191Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v192Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v193Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v194Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v195Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v196Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v197Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v198Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v199Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v200Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v201Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v202Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v203Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v204Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v205Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v206Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v207Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v208Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v209Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v210Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v211Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v212Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v213Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v214Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v215Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v216Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v217Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v218Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v219Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v220Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v221Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v222Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v223Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v224Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v225Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v226Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v227Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v228Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v229Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v230Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v231Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v232Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v233Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v234Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v235Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v236Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v237Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v238Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v239Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v240Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v241Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v242Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v243Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v244Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v245Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v246Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v247Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v248Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v249Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v250Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v251Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v252Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v253Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v254Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v255Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v256Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v257Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v258Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v259Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v260Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v261Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v262Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v263Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v264Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v265Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v266Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v267Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v268Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v269Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v270Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v271Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v272Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v273Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v274Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v275Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v276Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v277Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v278Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v279Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v280Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v281Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v282Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v283Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v284Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v285Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v286Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v287Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v288Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v289Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v290Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v291Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v292Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v293Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v294Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v295Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v296Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v297Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v298Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v299Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v300Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v301Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v302Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v303Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v304Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v305Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v306Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v307Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v308Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v309Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v310Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v311Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v312Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v313Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v314Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v315Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v316Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v317Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v318Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v319Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v320Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v321Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v322Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v323Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v324Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v325Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v326Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v327Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v328Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v329Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v330Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v331Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v332Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v333Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v334Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v335Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v336Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v337Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v338Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v339Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v340Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v341Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v342Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v343Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v344Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v345Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v346Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v347Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v348Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v349Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v350Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v351Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v352Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v353Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v354Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v355Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v356Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v357Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v358Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v359Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v360Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v361Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v362Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v363Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v364Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v365Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v366Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v367Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v368Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v369Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v370Ev,
  (VTBL_ENTRY)&_ZN7S8663C24v371Ev,
  (VTBL_ENTRY)&_ZN7S8663C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8663C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8663C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8663C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8663C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8663C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8663C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8663C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8663C12v9Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v10Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v11Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v12Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v13Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v14Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v15Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v16Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v17Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v18Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v19Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v20Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v21Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v22Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v23Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v24Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v25Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v26Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v27Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v28Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v29Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v30Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v31Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v32Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v33Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v34Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v35Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v36Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v37Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v38Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v39Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v40Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v41Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v42Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v43Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v44Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v45Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v46Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v47Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v48Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v49Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v50Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v51Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v52Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v53Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v54Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v55Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v56Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v57Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v58Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v59Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v60Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v61Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v62Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v63Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v64Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v65Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v66Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v67Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v68Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v69Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v70Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v71Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v72Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v73Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v74Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v75Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v76Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v77Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v78Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v79Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v80Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v81Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v82Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v83Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v84Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v85Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v86Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v87Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v88Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v89Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v90Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v91Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v92Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v93Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v94Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v95Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v96Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v97Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v98Ev,
  (VTBL_ENTRY)&_ZN7S8663C13v99Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v100Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v101Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v102Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v103Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v104Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v105Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v106Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v107Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v108Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v109Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v110Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v111Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v112Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v113Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v114Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v115Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v116Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v117Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v118Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v119Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v120Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v121Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v122Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v123Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v124Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v125Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v126Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v127Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v128Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v129Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v130Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v131Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v132Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v133Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v134Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v135Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v136Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v137Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v138Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v139Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v140Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v141Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v142Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v143Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v144Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v145Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v146Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v147Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v148Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v149Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v150Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v151Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v152Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v153Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v154Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v155Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v156Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v157Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v158Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v159Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v160Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v161Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v162Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v163Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v164Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v165Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v166Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v167Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v168Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v169Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v170Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v171Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v172Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v173Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v174Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v175Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v176Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v177Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v178Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v179Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v180Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v181Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v182Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v183Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v184Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v185Ev,
  (VTBL_ENTRY)&_ZN7S8663C14v186Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8663C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8663C1D1Ev,_ZThn4_N7S8663C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8663C1D0Ev,_ZThn4_N7S8663C1D0Ev),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI7S8663C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S8663C1D1Ev,_ZThn24_N7S8663C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N7S8663C1D0Ev,_ZThn24_N7S8663C1D0Ev),
  (VTBL_ENTRY)&_ZN10S8663C6_nt4v372Ev,
};
extern VTBL_ENTRY _ZTI7S8663C1[];
extern  VTBL_ENTRY _ZTV7S8663C1[];
Class_Descriptor cd_S8663C1 = {  "S8663C1", // class name
  bases_S8663C1, 3,
  &(vtc_S8663C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,180), // object size
  NSPAIRA(_ZTI7S8663C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S8663C1),384, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C7_nt  {
  void  mf5330c7(); // _ZN10S5330C7_nt8mf5330c7Ev
};
//SIG(-1 S5330C7_nt) C1{ m}


void  S5330C7_nt ::mf5330c7(){}

//skip512 S5330C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C5_nt  {
  void *s5330c5f0;
  int s5330c5f1;
  ::S8663C5_nt s5330c5f2;
  ::S5330C7_nt s5330c5f3;
  void  mf5330c5(); // _ZN10S5330C5_nt8mf5330c5Ev
};
//SIG(-1 S5330C5_nt) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S5330C5_nt ::mf5330c5(){}

//skip512 S5330C5_nt

#else // __cplusplus

Class_Descriptor cd_S5330C5_nt = {  "S5330C5_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C4_nt  : S5330C5_nt {
};
//SIG(-1 S5330C4_nt) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



//skip512 S5330C4_nt

#else // __cplusplus

extern Class_Descriptor cd_S5330C5_nt;
static Base_Class bases_S5330C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5330C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C3_nt  {
  void *s5330c3f0;
  int s5330c3f1;
  ::S5330C4_nt s5330c3f2;
  ::S5330C4_nt s5330c3f3;
  int s5330c3f4;
  virtual  ~S5330C3_nt(); // _ZN10S5330C3_ntD1Ev
  virtual void  v6(); // _ZN10S5330C3_nt2v6Ev
  virtual void  v7(); // _ZN10S5330C3_nt2v7Ev
  virtual void  v8(); // _ZN10S5330C3_nt2v8Ev
  virtual void  v9(); // _ZN10S5330C3_nt2v9Ev
  virtual void  v10(); // _ZN10S5330C3_nt3v10Ev
  virtual void  v11(); // _ZN10S5330C3_nt3v11Ev
  virtual void  v12(); // _ZN10S5330C3_nt3v12Ev
  virtual void  v13(); // _ZN10S5330C3_nt3v13Ev
  virtual void  v14(); // _ZN10S5330C3_nt3v14Ev
  virtual void  v15(); // _ZN10S5330C3_nt3v15Ev
  virtual void  v16(); // _ZN10S5330C3_nt3v16Ev
  virtual void  v17(); // _ZN10S5330C3_nt3v17Ev
  virtual void  v18(); // _ZN10S5330C3_nt3v18Ev
  virtual void  v19(); // _ZN10S5330C3_nt3v19Ev
  virtual void  v20(); // _ZN10S5330C3_nt3v20Ev
  virtual void  v21(); // _ZN10S5330C3_nt3v21Ev
  virtual void  v22(); // _ZN10S5330C3_nt3v22Ev
  virtual void  v23(); // _ZN10S5330C3_nt3v23Ev
  virtual void  v24(); // _ZN10S5330C3_nt3v24Ev
  virtual void  v25(); // _ZN10S5330C3_nt3v25Ev
  virtual void  v26(); // _ZN10S5330C3_nt3v26Ev
  virtual void  v27(); // _ZN10S5330C3_nt3v27Ev
  virtual void  v28(); // _ZN10S5330C3_nt3v28Ev
  S5330C3_nt(); // tgen
};
//SIG(-1 S5330C3_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 Fp Fi FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}} FC2 Fi}


 S5330C3_nt ::~S5330C3_nt(){ note_dtor("S5330C3_nt", this);}
void  S5330C3_nt ::v6(){vfunc_called(this, "_ZN10S5330C3_nt2v6Ev");}
void  S5330C3_nt ::v7(){vfunc_called(this, "_ZN10S5330C3_nt2v7Ev");}
void  S5330C3_nt ::v8(){vfunc_called(this, "_ZN10S5330C3_nt2v8Ev");}
void  S5330C3_nt ::v9(){vfunc_called(this, "_ZN10S5330C3_nt2v9Ev");}
void  S5330C3_nt ::v10(){vfunc_called(this, "_ZN10S5330C3_nt3v10Ev");}
void  S5330C3_nt ::v11(){vfunc_called(this, "_ZN10S5330C3_nt3v11Ev");}
void  S5330C3_nt ::v12(){vfunc_called(this, "_ZN10S5330C3_nt3v12Ev");}
void  S5330C3_nt ::v13(){vfunc_called(this, "_ZN10S5330C3_nt3v13Ev");}
void  S5330C3_nt ::v14(){vfunc_called(this, "_ZN10S5330C3_nt3v14Ev");}
void  S5330C3_nt ::v15(){vfunc_called(this, "_ZN10S5330C3_nt3v15Ev");}
void  S5330C3_nt ::v16(){vfunc_called(this, "_ZN10S5330C3_nt3v16Ev");}
void  S5330C3_nt ::v17(){vfunc_called(this, "_ZN10S5330C3_nt3v17Ev");}
void  S5330C3_nt ::v18(){vfunc_called(this, "_ZN10S5330C3_nt3v18Ev");}
void  S5330C3_nt ::v19(){vfunc_called(this, "_ZN10S5330C3_nt3v19Ev");}
void  S5330C3_nt ::v20(){vfunc_called(this, "_ZN10S5330C3_nt3v20Ev");}
void  S5330C3_nt ::v21(){vfunc_called(this, "_ZN10S5330C3_nt3v21Ev");}
void  S5330C3_nt ::v22(){vfunc_called(this, "_ZN10S5330C3_nt3v22Ev");}
void  S5330C3_nt ::v23(){vfunc_called(this, "_ZN10S5330C3_nt3v23Ev");}
void  S5330C3_nt ::v24(){vfunc_called(this, "_ZN10S5330C3_nt3v24Ev");}
void  S5330C3_nt ::v25(){vfunc_called(this, "_ZN10S5330C3_nt3v25Ev");}
void  S5330C3_nt ::v26(){vfunc_called(this, "_ZN10S5330C3_nt3v26Ev");}
void  S5330C3_nt ::v27(){vfunc_called(this, "_ZN10S5330C3_nt3v27Ev");}
void  S5330C3_nt ::v28(){vfunc_called(this, "_ZN10S5330C3_nt3v28Ev");}
S5330C3_nt ::S5330C3_nt(){ note_ctor("S5330C3_nt", this);} // tgen

//skip512 S5330C3_nt

#else // __cplusplus

extern void _ZN10S5330C3_ntC1Ev();
extern void _ZN10S5330C3_ntD1Ev();
Name_Map name_map_S5330C3_nt[] = {
  NSPAIR(_ZN10S5330C3_ntC1Ev),
  NSPAIR(_ZN10S5330C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S5330C3_nt[];
extern void _ZN10S5330C3_ntD1Ev();
extern void _ZN10S5330C3_ntD0Ev();
extern void _ZN10S5330C3_nt2v6Ev();
extern void _ZN10S5330C3_nt2v7Ev();
extern void _ZN10S5330C3_nt2v8Ev();
extern void _ZN10S5330C3_nt2v9Ev();
extern void _ZN10S5330C3_nt3v10Ev();
extern void _ZN10S5330C3_nt3v11Ev();
extern void _ZN10S5330C3_nt3v12Ev();
extern void _ZN10S5330C3_nt3v13Ev();
extern void _ZN10S5330C3_nt3v14Ev();
extern void _ZN10S5330C3_nt3v15Ev();
extern void _ZN10S5330C3_nt3v16Ev();
extern void _ZN10S5330C3_nt3v17Ev();
extern void _ZN10S5330C3_nt3v18Ev();
extern void _ZN10S5330C3_nt3v19Ev();
extern void _ZN10S5330C3_nt3v20Ev();
extern void _ZN10S5330C3_nt3v21Ev();
extern void _ZN10S5330C3_nt3v22Ev();
extern void _ZN10S5330C3_nt3v23Ev();
extern void _ZN10S5330C3_nt3v24Ev();
extern void _ZN10S5330C3_nt3v25Ev();
extern void _ZN10S5330C3_nt3v26Ev();
extern void _ZN10S5330C3_nt3v27Ev();
extern void _ZN10S5330C3_nt3v28Ev();
static  VTBL_ENTRY vtc_S5330C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5330C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S5330C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v28Ev,
};
extern VTBL_ENTRY _ZTI10S5330C3_nt[];
VTBL_ENTRY *P__ZTI10S5330C3_nt = _ZTI10S5330C3_nt; 
extern  VTBL_ENTRY _ZTV10S5330C3_nt[];
Class_Descriptor cd_S5330C3_nt = {  "S5330C3_nt", // class name
  0,0,//no base classes
  &(vtc_S5330C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI10S5330C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S5330C3_nt),27, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C13_nt  {
  __tsi64 s5330c13f0[2];
  void  mf5330c13(); // _ZN11S5330C13_nt9mf5330c13Ev
};
//SIG(-1 S5330C13_nt) C1{ m FL[2]}


void  S5330C13_nt ::mf5330c13(){}

//skip512 S5330C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C12_nt  {
  ::S5330C13_nt s5330c12f0;
  void  mf5330c12(); // _ZN11S5330C12_nt9mf5330c12Ev
};
//SIG(-1 S5330C12_nt) C1{ m FC2{ m FL[2]}}


void  S5330C12_nt ::mf5330c12(){}

//skip512 S5330C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C16_nt  {
  ::S5330C12_nt s5330c16f0;
  void  mf5330c16(); // _ZN11S5330C16_nt9mf5330c16Ev
};
//SIG(-1 S5330C16_nt) C1{ m FC2{ m FC3{ m FL[2]}}}


void  S5330C16_nt ::mf5330c16(){}

//skip512 S5330C16_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C17_nt  {
  ::S5330C12_nt s5330c17f0;
  ::S5330C12_nt s5330c17f1;
  ::S5330C12_nt s5330c17f2;
  ::S5330C12_nt s5330c17f3;
  void  mf5330c17(); // _ZN11S5330C17_nt9mf5330c17Ev
};
//SIG(-1 S5330C17_nt) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC2}


void  S5330C17_nt ::mf5330c17(){}

//skip512 S5330C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C19_nt  {
  void *s5330c19f0;
  int s5330c19f1;
  ::S5330C7_nt s5330c19f2;
  void  mf5330c19(); // _ZN11S5330C19_nt9mf5330c19Ev
};
//SIG(-1 S5330C19_nt) C1{ m Fp Fi FC2{ m}}


void  S5330C19_nt ::mf5330c19(){}

//skip512 S5330C19_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C18_nt  {
  ::S5330C19_nt s5330c18f0;
  int s5330c18f1;
  void  mf5330c18(); // _ZN11S5330C18_nt9mf5330c18Ev
};
//SIG(-1 S5330C18_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S5330C18_nt ::mf5330c18(){}

//skip512 S5330C18_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C22  {
  void  mf5330c22(); // _ZN8S5330C229mf5330c22Ev
};
//SIG(-1 S5330C22) C1{ m}


void  S5330C22 ::mf5330c22(){}

static void Test_S5330C22()
{
  {
    init_simple_test("S5330C22");
    S5330C22 lv;
    check2(sizeof(lv), 1, "sizeof(S5330C22)");
    check2(__alignof__(lv), 1, "__alignof__(S5330C22)");
  }
}
static Arrange_To_Call_Me vS5330C22(Test_S5330C22, "S5330C22", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C21  {
  void *s5330c21f0;
  int s5330c21f1;
  ::S5330C22 s5330c21f2;
  ::S5330C22 s5330c21f3;
  void  mf5330c21(); // _ZN8S5330C219mf5330c21Ev
};
//SIG(-1 S5330C21) C1{ m Fp Fi FC2{ m} FC2}


void  S5330C21 ::mf5330c21(){}

static void Test_S5330C21()
{
  {
    init_simple_test("S5330C21");
    S5330C21 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5330C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5330C21)");
    check_field_offset(lv, s5330c21f0, 0, "S5330C21.s5330c21f0");
    check_field_offset(lv, s5330c21f1, ABISELECT(8,4), "S5330C21.s5330c21f1");
    check_field_offset(lv, s5330c21f2, ABISELECT(12,8), "S5330C21.s5330c21f2");
    check_field_offset(lv, s5330c21f3, ABISELECT(13,9), "S5330C21.s5330c21f3");
  }
}
static Arrange_To_Call_Me vS5330C21(Test_S5330C21, "S5330C21", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C26  {
  void  mf5330c26(); // _ZN8S5330C269mf5330c26Ev
};
//SIG(-1 S5330C26) C1{ m}


void  S5330C26 ::mf5330c26(){}

static void Test_S5330C26()
{
  {
    init_simple_test("S5330C26");
    S5330C26 lv;
    check2(sizeof(lv), 1, "sizeof(S5330C26)");
    check2(__alignof__(lv), 1, "__alignof__(S5330C26)");
  }
}
static Arrange_To_Call_Me vS5330C26(Test_S5330C26, "S5330C26", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C25  {
  void *s5330c25f0;
  int s5330c25f1;
  ::S5330C26 s5330c25f2;
  ::S5330C26 s5330c25f3;
  void  mf5330c25(); // _ZN8S5330C259mf5330c25Ev
};
//SIG(-1 S5330C25) C1{ m Fp Fi FC2{ m} FC2}


void  S5330C25 ::mf5330c25(){}

static void Test_S5330C25()
{
  {
    init_simple_test("S5330C25");
    S5330C25 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5330C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5330C25)");
    check_field_offset(lv, s5330c25f0, 0, "S5330C25.s5330c25f0");
    check_field_offset(lv, s5330c25f1, ABISELECT(8,4), "S5330C25.s5330c25f1");
    check_field_offset(lv, s5330c25f2, ABISELECT(12,8), "S5330C25.s5330c25f2");
    check_field_offset(lv, s5330c25f3, ABISELECT(13,9), "S5330C25.s5330c25f3");
  }
}
static Arrange_To_Call_Me vS5330C25(Test_S5330C25, "S5330C25", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S5330C25 = {  "S5330C25", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C24  : S5330C25 {
};
//SIG(-1 S5330C24) C1{ BC2{ m Fp Fi FC3{ m} FC3}}



static void Test_S5330C24()
{
  extern Class_Descriptor cd_S5330C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S5330C24, buf);
    S5330C24 &lv = *(new (buf) S5330C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S5330C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5330C24)");
    check_base_class_offset(lv, (S5330C25*), 0, "S5330C24");
    test_class_info(&lv, &cd_S5330C24);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5330C24(Test_S5330C24, "S5330C24", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S5330C25;
static Base_Class bases_S5330C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5330C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5330C24 = {  "S5330C24", // class name
  bases_S5330C24, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C35  {
  void  mf5330c35(); // _ZN8S5330C359mf5330c35Ev
};
//SIG(-1 S5330C35) C1{ m}


void  S5330C35 ::mf5330c35(){}

static void Test_S5330C35()
{
  {
    init_simple_test("S5330C35");
    S5330C35 lv;
    check2(sizeof(lv), 1, "sizeof(S5330C35)");
    check2(__alignof__(lv), 1, "__alignof__(S5330C35)");
  }
}
static Arrange_To_Call_Me vS5330C35(Test_S5330C35, "S5330C35", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C34_nt  {
  void *s5330c34f0;
  int s5330c34f1[2];
  ::S5330C35 s5330c34f2;
  void  mf5330c34(); // _ZN11S5330C34_nt9mf5330c34Ev
};
//SIG(-1 S5330C34_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S5330C34_nt ::mf5330c34(){}

//skip512 S5330C34_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C2_nt  : S5330C3_nt {
  ::S5330C12_nt s5330c2f0;
  ::S5330C12_nt s5330c2f1;
  ::S5330C12_nt s5330c2f2;
  ::S5330C12_nt s5330c2f3;
  ::S5330C16_nt s5330c2f4;
  ::S5330C17_nt s5330c2f5;
  ::S5330C17_nt s5330c2f6;
  ::S5330C12_nt s5330c2f7;
  ::S5330C12_nt s5330c2f8;
  ::S5330C12_nt s5330c2f9;
  void *s5330c2f10;
  ::S5330C16_nt s5330c2f11;
  ::S5330C18_nt s5330c2f12;
  int s5330c2f13;
  void *s5330c2f14[7];
  ::S5330C21 s5330c2f15;
  int s5330c2f16:8;
  int s5330c2f17:8;
  int s5330c2f18:16;
  int s5330c2f19:16;
  int s5330c2f20:8;
  int s5330c2f21:8;
  int s5330c2f22:8;
  int s5330c2f23:32;
  int s5330c2f24:8;
  int s5330c2f25:4;
  int s5330c2f26:4;
  int s5330c2f27:4;
  int s5330c2f28:4;
  int s5330c2f29:4;
  int s5330c2f30:4;
  int s5330c2f31:4;
  int s5330c2f32:4;
  int s5330c2f33:4;
  int s5330c2f34:4;
  unsigned char s5330c2f35:1;
  unsigned char s5330c2f36:1;
  unsigned char s5330c2f37:1;
  unsigned char s5330c2f38:1;
  unsigned char s5330c2f39:1;
  unsigned char s5330c2f40:1;
  unsigned char s5330c2f41:1;
  unsigned char s5330c2f42:1;
  unsigned char s5330c2f43:1;
  unsigned char s5330c2f44:1;
  unsigned char s5330c2f45:1;
  unsigned char s5330c2f46:1;
  unsigned char s5330c2f47:1;
  unsigned char s5330c2f48:1;
  unsigned char s5330c2f49:1;
  unsigned char s5330c2f50:1;
  unsigned char s5330c2f51:1;
  unsigned char s5330c2f52:1;
  unsigned char s5330c2f53:1;
  unsigned char s5330c2f54:1;
  unsigned char s5330c2f55:1;
  unsigned char s5330c2f56:1;
  unsigned char s5330c2f57:1;
  unsigned char s5330c2f58:1;
  unsigned char s5330c2f59:1;
  unsigned char s5330c2f60:1;
  unsigned char s5330c2f61:1;
  unsigned char s5330c2f62:1;
  unsigned char s5330c2f63:1;
  unsigned char s5330c2f64:1;
  unsigned char s5330c2f65:1;
  unsigned char s5330c2f66:1;
  unsigned char s5330c2f67:1;
  unsigned char s5330c2f68:1;
  unsigned char s5330c2f69:1;
  unsigned char s5330c2f70:1;
  unsigned char s5330c2f71:1;
  unsigned char s5330c2f72:1;
  unsigned char s5330c2f73:1;
  unsigned char s5330c2f74:1;
  unsigned char s5330c2f75:1;
  int s5330c2f76[7];
  void *s5330c2f77[6];
  int s5330c2f78:8;
  int s5330c2f79:8;
  int s5330c2f80:8;
  int s5330c2f81:8;
  int s5330c2f82:8;
  int s5330c2f83:8;
  ::S5330C24 s5330c2f84;
  void *s5330c2f85[4];
  int s5330c2f86:8;
  int s5330c2f87:8;
  int s5330c2f88:8;
  int s5330c2f89:8;
  int s5330c2f90:8;
  int s5330c2f91:16;
  int s5330c2f92:16;
  int s5330c2f93:16;
  int s5330c2f94:4;
  int s5330c2f95:4;
  int s5330c2f96:4;
  int s5330c2f97:4;
  int s5330c2f98:4;
  int s5330c2f99:4;
  int s5330c2f100:4;
  int s5330c2f101:4;
  int s5330c2f102:4;
  int s5330c2f103:4;
  int s5330c2f104:4;
  int s5330c2f105:4;
  int s5330c2f106:8;
  int s5330c2f107:8;
  int s5330c2f108:8;
  void *s5330c2f109[7];
  ::S8663C4_nt s5330c2f110;
  void *s5330c2f111[2];
  int s5330c2f112:16;
  int s5330c2f113:16;
  ::S5330C24 s5330c2f114;
  ::S5330C34_nt s5330c2f115;
  ::S5330C34_nt s5330c2f116;
  void *s5330c2f117[2];
  int s5330c2f118:24;
  int s5330c2f119:8;
  void *s5330c2f120;
  virtual  ~S5330C2_nt(); // _ZN10S5330C2_ntD1Ev
  virtual void  v29(); // _ZN10S5330C2_nt3v29Ev
  virtual void  v30(); // _ZN10S5330C2_nt3v30Ev
  virtual void  v31(); // _ZN10S5330C2_nt3v31Ev
  virtual void  v32(); // _ZN10S5330C2_nt3v32Ev
  virtual void  v33(); // _ZN10S5330C2_nt3v33Ev
  virtual void  v34(); // _ZN10S5330C2_nt3v34Ev
  virtual void  v35(); // _ZN10S5330C2_nt3v35Ev
  virtual void  v36(); // _ZN10S5330C2_nt3v36Ev
  virtual void  v37(); // _ZN10S5330C2_nt3v37Ev
  virtual void  v38(); // _ZN10S5330C2_nt3v38Ev
  virtual void  v39(); // _ZN10S5330C2_nt3v39Ev
  virtual void  v40(); // _ZN10S5330C2_nt3v40Ev
  virtual void  v41(); // _ZN10S5330C2_nt3v41Ev
  virtual void  v42(); // _ZN10S5330C2_nt3v42Ev
  virtual void  v43(); // _ZN10S5330C2_nt3v43Ev
  virtual void  v44(); // _ZN10S5330C2_nt3v44Ev
  virtual void  v45(); // _ZN10S5330C2_nt3v45Ev
  virtual void  v46(); // _ZN10S5330C2_nt3v46Ev
  virtual void  v47(); // _ZN10S5330C2_nt3v47Ev
  virtual void  v48(); // _ZN10S5330C2_nt3v48Ev
  virtual void  v49(); // _ZN10S5330C2_nt3v49Ev
  virtual void  v50(); // _ZN10S5330C2_nt3v50Ev
  virtual void  v51(); // _ZN10S5330C2_nt3v51Ev
  virtual void  v52(); // _ZN10S5330C2_nt3v52Ev
  virtual void  v53(); // _ZN10S5330C2_nt3v53Ev
  virtual void  v54(); // _ZN10S5330C2_nt3v54Ev
  virtual void  v55(); // _ZN10S5330C2_nt3v55Ev
  virtual void  v56(); // _ZN10S5330C2_nt3v56Ev
  virtual void  v57(); // _ZN10S5330C2_nt3v57Ev
  virtual void  v58(); // _ZN10S5330C2_nt3v58Ev
  virtual void  v59(); // _ZN10S5330C2_nt3v59Ev
  virtual void  v60(); // _ZN10S5330C2_nt3v60Ev
  virtual void  v61(); // _ZN10S5330C2_nt3v61Ev
  virtual void  v62(); // _ZN10S5330C2_nt3v62Ev
  virtual void  v63(); // _ZN10S5330C2_nt3v63Ev
  virtual void  v64(); // _ZN10S5330C2_nt3v64Ev
  virtual void  v65(); // _ZN10S5330C2_nt3v65Ev
  virtual void  v66(); // _ZN10S5330C2_nt3v66Ev
  virtual void  v67(); // _ZN10S5330C2_nt3v67Ev
  virtual void  v68(); // _ZN10S5330C2_nt3v68Ev
  virtual void  v69(); // _ZN10S5330C2_nt3v69Ev
  virtual void  v70(); // _ZN10S5330C2_nt3v70Ev
  virtual void  v71(); // _ZN10S5330C2_nt3v71Ev
  virtual void  v72(); // _ZN10S5330C2_nt3v72Ev
  virtual void  v73(); // _ZN10S5330C2_nt3v73Ev
  virtual void  v74(); // _ZN10S5330C2_nt3v74Ev
  virtual void  v75(); // _ZN10S5330C2_nt3v75Ev
  virtual void  v76(); // _ZN10S5330C2_nt3v76Ev
  virtual void  v77(); // _ZN10S5330C2_nt3v77Ev
  virtual void  v78(); // _ZN10S5330C2_nt3v78Ev
  virtual void  v79(); // _ZN10S5330C2_nt3v79Ev
  virtual void  v80(); // _ZN10S5330C2_nt3v80Ev
  virtual void  v81(); // _ZN10S5330C2_nt3v81Ev
  virtual void  v82(); // _ZN10S5330C2_nt3v82Ev
  virtual void  v83(); // _ZN10S5330C2_nt3v83Ev
  virtual void  v84(); // _ZN10S5330C2_nt3v84Ev
  virtual void  v85(); // _ZN10S5330C2_nt3v85Ev
  virtual void  v86(); // _ZN10S5330C2_nt3v86Ev
  virtual void  v87(); // _ZN10S5330C2_nt3v87Ev
  virtual void  v88(); // _ZN10S5330C2_nt3v88Ev
  virtual void  v89(); // _ZN10S5330C2_nt3v89Ev
  virtual void  v90(); // _ZN10S5330C2_nt3v90Ev
  virtual void  v91(); // _ZN10S5330C2_nt3v91Ev
  virtual void  v92(); // _ZN10S5330C2_nt3v92Ev
  virtual void  v93(); // _ZN10S5330C2_nt3v93Ev
  virtual void  v94(); // _ZN10S5330C2_nt3v94Ev
  virtual void  v95(); // _ZN10S5330C2_nt3v95Ev
  virtual void  v96(); // _ZN10S5330C2_nt3v96Ev
  virtual void  v97(); // _ZN10S5330C2_nt3v97Ev
  virtual void  v98(); // _ZN10S5330C2_nt3v98Ev
  virtual void  v99(); // _ZN10S5330C2_nt3v99Ev
  virtual void  v100(); // _ZN10S5330C2_nt4v100Ev
  virtual void  v101(); // _ZN10S5330C2_nt4v101Ev
  virtual void  v102(); // _ZN10S5330C2_nt4v102Ev
  virtual void  v103(); // _ZN10S5330C2_nt4v103Ev
  virtual void  v104(); // _ZN10S5330C2_nt4v104Ev
  virtual void  v105(); // _ZN10S5330C2_nt4v105Ev
  virtual void  v106(); // _ZN10S5330C2_nt4v106Ev
  S5330C2_nt(); // tgen
};
//SIG(-1 S5330C2_nt) C1{ BC2{ vd v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 Fp Fi FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}} FC3 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 FC7{ m FC8{ m FL[2]}} FC7 FC7 FC7 FC9{ m FC7} FC10{ m FC7 FC7 FC7 FC7} FC10 FC7 FC7 FC7 Fp FC9 FC11{ m FC12{ m Fp Fi FC6} Fi} Fi Fp[7] FC13{ m Fp Fi FC14{ m} FC14} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC15{ BC16{ m Fp Fi FC17{ m} FC17}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC18{ m Fp Fi[2] FC5} Fp[2] Fi:16 Fi:16 FC15 FC19{ m Fp Fi[2] FC20{ m}} FC19 Fp[2] Fi:24 Fi:8 Fp}


 S5330C2_nt ::~S5330C2_nt(){ note_dtor("S5330C2_nt", this);}
void  S5330C2_nt ::v29(){vfunc_called(this, "_ZN10S5330C2_nt3v29Ev");}
void  S5330C2_nt ::v30(){vfunc_called(this, "_ZN10S5330C2_nt3v30Ev");}
void  S5330C2_nt ::v31(){vfunc_called(this, "_ZN10S5330C2_nt3v31Ev");}
void  S5330C2_nt ::v32(){vfunc_called(this, "_ZN10S5330C2_nt3v32Ev");}
void  S5330C2_nt ::v33(){vfunc_called(this, "_ZN10S5330C2_nt3v33Ev");}
void  S5330C2_nt ::v34(){vfunc_called(this, "_ZN10S5330C2_nt3v34Ev");}
void  S5330C2_nt ::v35(){vfunc_called(this, "_ZN10S5330C2_nt3v35Ev");}
void  S5330C2_nt ::v36(){vfunc_called(this, "_ZN10S5330C2_nt3v36Ev");}
void  S5330C2_nt ::v37(){vfunc_called(this, "_ZN10S5330C2_nt3v37Ev");}
void  S5330C2_nt ::v38(){vfunc_called(this, "_ZN10S5330C2_nt3v38Ev");}
void  S5330C2_nt ::v39(){vfunc_called(this, "_ZN10S5330C2_nt3v39Ev");}
void  S5330C2_nt ::v40(){vfunc_called(this, "_ZN10S5330C2_nt3v40Ev");}
void  S5330C2_nt ::v41(){vfunc_called(this, "_ZN10S5330C2_nt3v41Ev");}
void  S5330C2_nt ::v42(){vfunc_called(this, "_ZN10S5330C2_nt3v42Ev");}
void  S5330C2_nt ::v43(){vfunc_called(this, "_ZN10S5330C2_nt3v43Ev");}
void  S5330C2_nt ::v44(){vfunc_called(this, "_ZN10S5330C2_nt3v44Ev");}
void  S5330C2_nt ::v45(){vfunc_called(this, "_ZN10S5330C2_nt3v45Ev");}
void  S5330C2_nt ::v46(){vfunc_called(this, "_ZN10S5330C2_nt3v46Ev");}
void  S5330C2_nt ::v47(){vfunc_called(this, "_ZN10S5330C2_nt3v47Ev");}
void  S5330C2_nt ::v48(){vfunc_called(this, "_ZN10S5330C2_nt3v48Ev");}
void  S5330C2_nt ::v49(){vfunc_called(this, "_ZN10S5330C2_nt3v49Ev");}
void  S5330C2_nt ::v50(){vfunc_called(this, "_ZN10S5330C2_nt3v50Ev");}
void  S5330C2_nt ::v51(){vfunc_called(this, "_ZN10S5330C2_nt3v51Ev");}
void  S5330C2_nt ::v52(){vfunc_called(this, "_ZN10S5330C2_nt3v52Ev");}
void  S5330C2_nt ::v53(){vfunc_called(this, "_ZN10S5330C2_nt3v53Ev");}
void  S5330C2_nt ::v54(){vfunc_called(this, "_ZN10S5330C2_nt3v54Ev");}
void  S5330C2_nt ::v55(){vfunc_called(this, "_ZN10S5330C2_nt3v55Ev");}
void  S5330C2_nt ::v56(){vfunc_called(this, "_ZN10S5330C2_nt3v56Ev");}
void  S5330C2_nt ::v57(){vfunc_called(this, "_ZN10S5330C2_nt3v57Ev");}
void  S5330C2_nt ::v58(){vfunc_called(this, "_ZN10S5330C2_nt3v58Ev");}
void  S5330C2_nt ::v59(){vfunc_called(this, "_ZN10S5330C2_nt3v59Ev");}
void  S5330C2_nt ::v60(){vfunc_called(this, "_ZN10S5330C2_nt3v60Ev");}
void  S5330C2_nt ::v61(){vfunc_called(this, "_ZN10S5330C2_nt3v61Ev");}
void  S5330C2_nt ::v62(){vfunc_called(this, "_ZN10S5330C2_nt3v62Ev");}
void  S5330C2_nt ::v63(){vfunc_called(this, "_ZN10S5330C2_nt3v63Ev");}
void  S5330C2_nt ::v64(){vfunc_called(this, "_ZN10S5330C2_nt3v64Ev");}
void  S5330C2_nt ::v65(){vfunc_called(this, "_ZN10S5330C2_nt3v65Ev");}
void  S5330C2_nt ::v66(){vfunc_called(this, "_ZN10S5330C2_nt3v66Ev");}
void  S5330C2_nt ::v67(){vfunc_called(this, "_ZN10S5330C2_nt3v67Ev");}
void  S5330C2_nt ::v68(){vfunc_called(this, "_ZN10S5330C2_nt3v68Ev");}
void  S5330C2_nt ::v69(){vfunc_called(this, "_ZN10S5330C2_nt3v69Ev");}
void  S5330C2_nt ::v70(){vfunc_called(this, "_ZN10S5330C2_nt3v70Ev");}
void  S5330C2_nt ::v71(){vfunc_called(this, "_ZN10S5330C2_nt3v71Ev");}
void  S5330C2_nt ::v72(){vfunc_called(this, "_ZN10S5330C2_nt3v72Ev");}
void  S5330C2_nt ::v73(){vfunc_called(this, "_ZN10S5330C2_nt3v73Ev");}
void  S5330C2_nt ::v74(){vfunc_called(this, "_ZN10S5330C2_nt3v74Ev");}
void  S5330C2_nt ::v75(){vfunc_called(this, "_ZN10S5330C2_nt3v75Ev");}
void  S5330C2_nt ::v76(){vfunc_called(this, "_ZN10S5330C2_nt3v76Ev");}
void  S5330C2_nt ::v77(){vfunc_called(this, "_ZN10S5330C2_nt3v77Ev");}
void  S5330C2_nt ::v78(){vfunc_called(this, "_ZN10S5330C2_nt3v78Ev");}
void  S5330C2_nt ::v79(){vfunc_called(this, "_ZN10S5330C2_nt3v79Ev");}
void  S5330C2_nt ::v80(){vfunc_called(this, "_ZN10S5330C2_nt3v80Ev");}
void  S5330C2_nt ::v81(){vfunc_called(this, "_ZN10S5330C2_nt3v81Ev");}
void  S5330C2_nt ::v82(){vfunc_called(this, "_ZN10S5330C2_nt3v82Ev");}
void  S5330C2_nt ::v83(){vfunc_called(this, "_ZN10S5330C2_nt3v83Ev");}
void  S5330C2_nt ::v84(){vfunc_called(this, "_ZN10S5330C2_nt3v84Ev");}
void  S5330C2_nt ::v85(){vfunc_called(this, "_ZN10S5330C2_nt3v85Ev");}
void  S5330C2_nt ::v86(){vfunc_called(this, "_ZN10S5330C2_nt3v86Ev");}
void  S5330C2_nt ::v87(){vfunc_called(this, "_ZN10S5330C2_nt3v87Ev");}
void  S5330C2_nt ::v88(){vfunc_called(this, "_ZN10S5330C2_nt3v88Ev");}
void  S5330C2_nt ::v89(){vfunc_called(this, "_ZN10S5330C2_nt3v89Ev");}
void  S5330C2_nt ::v90(){vfunc_called(this, "_ZN10S5330C2_nt3v90Ev");}
void  S5330C2_nt ::v91(){vfunc_called(this, "_ZN10S5330C2_nt3v91Ev");}
void  S5330C2_nt ::v92(){vfunc_called(this, "_ZN10S5330C2_nt3v92Ev");}
void  S5330C2_nt ::v93(){vfunc_called(this, "_ZN10S5330C2_nt3v93Ev");}
void  S5330C2_nt ::v94(){vfunc_called(this, "_ZN10S5330C2_nt3v94Ev");}
void  S5330C2_nt ::v95(){vfunc_called(this, "_ZN10S5330C2_nt3v95Ev");}
void  S5330C2_nt ::v96(){vfunc_called(this, "_ZN10S5330C2_nt3v96Ev");}
void  S5330C2_nt ::v97(){vfunc_called(this, "_ZN10S5330C2_nt3v97Ev");}
void  S5330C2_nt ::v98(){vfunc_called(this, "_ZN10S5330C2_nt3v98Ev");}
void  S5330C2_nt ::v99(){vfunc_called(this, "_ZN10S5330C2_nt3v99Ev");}
void  S5330C2_nt ::v100(){vfunc_called(this, "_ZN10S5330C2_nt4v100Ev");}
void  S5330C2_nt ::v101(){vfunc_called(this, "_ZN10S5330C2_nt4v101Ev");}
void  S5330C2_nt ::v102(){vfunc_called(this, "_ZN10S5330C2_nt4v102Ev");}
void  S5330C2_nt ::v103(){vfunc_called(this, "_ZN10S5330C2_nt4v103Ev");}
void  S5330C2_nt ::v104(){vfunc_called(this, "_ZN10S5330C2_nt4v104Ev");}
void  S5330C2_nt ::v105(){vfunc_called(this, "_ZN10S5330C2_nt4v105Ev");}
void  S5330C2_nt ::v106(){vfunc_called(this, "_ZN10S5330C2_nt4v106Ev");}
S5330C2_nt ::S5330C2_nt(){ note_ctor("S5330C2_nt", this);} // tgen

//skip512 S5330C2_nt

#else // __cplusplus

extern void _ZN10S5330C2_ntC1Ev();
extern void _ZN10S5330C2_ntD1Ev();
Name_Map name_map_S5330C2_nt[] = {
  NSPAIR(_ZN10S5330C2_ntC1Ev),
  NSPAIR(_ZN10S5330C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5330C3_nt;
extern VTBL_ENTRY _ZTI10S5330C3_nt[];
extern  VTBL_ENTRY _ZTV10S5330C3_nt[];
static Base_Class bases_S5330C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5330C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S5330C2_nt[];
extern void _ZN10S5330C2_ntD1Ev();
extern void _ZN10S5330C2_ntD0Ev();
extern void _ZN10S5330C3_nt2v6Ev();
extern void _ZN10S5330C3_nt2v7Ev();
extern void _ZN10S5330C3_nt2v8Ev();
extern void _ZN10S5330C3_nt2v9Ev();
extern void _ZN10S5330C3_nt3v10Ev();
extern void _ZN10S5330C3_nt3v11Ev();
extern void _ZN10S5330C3_nt3v12Ev();
extern void _ZN10S5330C3_nt3v13Ev();
extern void _ZN10S5330C3_nt3v14Ev();
extern void _ZN10S5330C3_nt3v15Ev();
extern void _ZN10S5330C3_nt3v16Ev();
extern void _ZN10S5330C3_nt3v17Ev();
extern void _ZN10S5330C3_nt3v18Ev();
extern void _ZN10S5330C3_nt3v19Ev();
extern void _ZN10S5330C3_nt3v20Ev();
extern void _ZN10S5330C3_nt3v21Ev();
extern void _ZN10S5330C3_nt3v22Ev();
extern void _ZN10S5330C3_nt3v23Ev();
extern void _ZN10S5330C3_nt3v24Ev();
extern void _ZN10S5330C3_nt3v25Ev();
extern void _ZN10S5330C3_nt3v26Ev();
extern void _ZN10S5330C3_nt3v27Ev();
extern void _ZN10S5330C3_nt3v28Ev();
extern void _ZN10S5330C2_nt3v29Ev();
extern void _ZN10S5330C2_nt3v30Ev();
extern void _ZN10S5330C2_nt3v31Ev();
extern void _ZN10S5330C2_nt3v32Ev();
extern void _ZN10S5330C2_nt3v33Ev();
extern void _ZN10S5330C2_nt3v34Ev();
extern void _ZN10S5330C2_nt3v35Ev();
extern void _ZN10S5330C2_nt3v36Ev();
extern void _ZN10S5330C2_nt3v37Ev();
extern void _ZN10S5330C2_nt3v38Ev();
extern void _ZN10S5330C2_nt3v39Ev();
extern void _ZN10S5330C2_nt3v40Ev();
extern void _ZN10S5330C2_nt3v41Ev();
extern void _ZN10S5330C2_nt3v42Ev();
extern void _ZN10S5330C2_nt3v43Ev();
extern void _ZN10S5330C2_nt3v44Ev();
extern void _ZN10S5330C2_nt3v45Ev();
extern void _ZN10S5330C2_nt3v46Ev();
extern void _ZN10S5330C2_nt3v47Ev();
extern void _ZN10S5330C2_nt3v48Ev();
extern void _ZN10S5330C2_nt3v49Ev();
extern void _ZN10S5330C2_nt3v50Ev();
extern void _ZN10S5330C2_nt3v51Ev();
extern void _ZN10S5330C2_nt3v52Ev();
extern void _ZN10S5330C2_nt3v53Ev();
extern void _ZN10S5330C2_nt3v54Ev();
extern void _ZN10S5330C2_nt3v55Ev();
extern void _ZN10S5330C2_nt3v56Ev();
extern void _ZN10S5330C2_nt3v57Ev();
extern void _ZN10S5330C2_nt3v58Ev();
extern void _ZN10S5330C2_nt3v59Ev();
extern void _ZN10S5330C2_nt3v60Ev();
extern void _ZN10S5330C2_nt3v61Ev();
extern void _ZN10S5330C2_nt3v62Ev();
extern void _ZN10S5330C2_nt3v63Ev();
extern void _ZN10S5330C2_nt3v64Ev();
extern void _ZN10S5330C2_nt3v65Ev();
extern void _ZN10S5330C2_nt3v66Ev();
extern void _ZN10S5330C2_nt3v67Ev();
extern void _ZN10S5330C2_nt3v68Ev();
extern void _ZN10S5330C2_nt3v69Ev();
extern void _ZN10S5330C2_nt3v70Ev();
extern void _ZN10S5330C2_nt3v71Ev();
extern void _ZN10S5330C2_nt3v72Ev();
extern void _ZN10S5330C2_nt3v73Ev();
extern void _ZN10S5330C2_nt3v74Ev();
extern void _ZN10S5330C2_nt3v75Ev();
extern void _ZN10S5330C2_nt3v76Ev();
extern void _ZN10S5330C2_nt3v77Ev();
extern void _ZN10S5330C2_nt3v78Ev();
extern void _ZN10S5330C2_nt3v79Ev();
extern void _ZN10S5330C2_nt3v80Ev();
extern void _ZN10S5330C2_nt3v81Ev();
extern void _ZN10S5330C2_nt3v82Ev();
extern void _ZN10S5330C2_nt3v83Ev();
extern void _ZN10S5330C2_nt3v84Ev();
extern void _ZN10S5330C2_nt3v85Ev();
extern void _ZN10S5330C2_nt3v86Ev();
extern void _ZN10S5330C2_nt3v87Ev();
extern void _ZN10S5330C2_nt3v88Ev();
extern void _ZN10S5330C2_nt3v89Ev();
extern void _ZN10S5330C2_nt3v90Ev();
extern void _ZN10S5330C2_nt3v91Ev();
extern void _ZN10S5330C2_nt3v92Ev();
extern void _ZN10S5330C2_nt3v93Ev();
extern void _ZN10S5330C2_nt3v94Ev();
extern void _ZN10S5330C2_nt3v95Ev();
extern void _ZN10S5330C2_nt3v96Ev();
extern void _ZN10S5330C2_nt3v97Ev();
extern void _ZN10S5330C2_nt3v98Ev();
extern void _ZN10S5330C2_nt3v99Ev();
extern void _ZN10S5330C2_nt4v100Ev();
extern void _ZN10S5330C2_nt4v101Ev();
extern void _ZN10S5330C2_nt4v102Ev();
extern void _ZN10S5330C2_nt4v103Ev();
extern void _ZN10S5330C2_nt4v104Ev();
extern void _ZN10S5330C2_nt4v105Ev();
extern void _ZN10S5330C2_nt4v106Ev();
static  VTBL_ENTRY vtc_S5330C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S5330C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S5330C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt4v106Ev,
};
extern VTBL_ENTRY _ZTI10S5330C2_nt[];
VTBL_ENTRY *P__ZTI10S5330C2_nt = _ZTI10S5330C2_nt; 
extern  VTBL_ENTRY _ZTV10S5330C2_nt[];
Class_Descriptor cd_S5330C2_nt = {  "S5330C2_nt", // class name
  bases_S5330C2_nt, 1,
  &(vtc_S5330C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI10S5330C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S5330C2_nt),105, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5330C1  : S5330C2_nt {
  void *s5330c1f0[2];
  virtual  ~S5330C1(); // _ZN7S5330C1D1Ev
  virtual void  v1(); // _ZN7S5330C12v1Ev
  virtual void  v2(); // _ZN7S5330C12v2Ev
  virtual void  v3(); // _ZN7S5330C12v3Ev
  virtual void  v4(); // _ZN7S5330C12v4Ev
  virtual void  v5(); // _ZN7S5330C12v5Ev
  S5330C1(); // tgen
};
//SIG(1 S5330C1) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 Fp Fi FC4{ BC5{ m Fp Fi FC6{ m} FC7{ m}}} FC4 Fi} vd v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 FC8{ m FC9{ m FL[2]}} FC8 FC8 FC8 FC10{ m FC8} FC11{ m FC8 FC8 FC8 FC8} FC11 FC8 FC8 FC8 Fp FC10 FC12{ m FC13{ m Fp Fi FC7} Fi} Fi Fp[7] FC14{ m Fp Fi FC15{ m} FC15} Fi:8 Fi:8 Fi:16 Fi:16 Fi:8 Fi:8 Fi:8 Fi:32 Fi:8 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fc:1 Fi[7] Fp[6] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 FC16{ BC17{ m Fp Fi FC18{ m} FC18}} Fp[4] Fi:8 Fi:8 Fi:8 Fi:8 Fi:8 Fi:16 Fi:16 Fi:16 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:4 Fi:8 Fi:8 Fi:8 Fp[7] FC19{ m Fp Fi[2] FC6} Fp[2] Fi:16 Fi:16 FC16 FC20{ m Fp Fi[2] FC21{ m}} FC20 Fp[2] Fi:24 Fi:8 Fp} vd v1 v2 v3 v4 v5 Fp[2]}


 S5330C1 ::~S5330C1(){ note_dtor("S5330C1", this);}
void  S5330C1 ::v1(){vfunc_called(this, "_ZN7S5330C12v1Ev");}
void  S5330C1 ::v2(){vfunc_called(this, "_ZN7S5330C12v2Ev");}
void  S5330C1 ::v3(){vfunc_called(this, "_ZN7S5330C12v3Ev");}
void  S5330C1 ::v4(){vfunc_called(this, "_ZN7S5330C12v4Ev");}
void  S5330C1 ::v5(){vfunc_called(this, "_ZN7S5330C12v5Ev");}
S5330C1 ::S5330C1(){ note_ctor("S5330C1", this);} // tgen

static void Test_S5330C1()
{
  extern Class_Descriptor cd_S5330C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(107,161)];
    init_test(&cd_S5330C1, buf);
    S5330C1 *dp, &lv = *(dp=new (buf) S5330C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(848,640), "sizeof(S5330C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5330C1)");
    check_base_class_offset(lv, (S5330C3_nt*)(S5330C2_nt*), 0, "S5330C1");
    check_base_class_offset(lv, (S5330C2_nt*), 0, "S5330C1");
    check_field_offset(lv, s5330c1f0, ABISELECT(832,632), "S5330C1.s5330c1f0");
    test_class_info(&lv, &cd_S5330C1);
    dp->~S5330C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5330C1(Test_S5330C1, "S5330C1", ABISELECT(848,640));

#else // __cplusplus

extern void _ZN7S5330C1C1Ev();
extern void _ZN7S5330C1D1Ev();
Name_Map name_map_S5330C1[] = {
  NSPAIR(_ZN7S5330C1C1Ev),
  NSPAIR(_ZN7S5330C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S5330C3_nt;
extern VTBL_ENTRY _ZTI10S5330C3_nt[];
extern  VTBL_ENTRY _ZTV10S5330C3_nt[];
extern Class_Descriptor cd_S5330C2_nt;
extern VTBL_ENTRY _ZTI10S5330C2_nt[];
extern  VTBL_ENTRY _ZTV10S5330C2_nt[];
static Base_Class bases_S5330C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5330C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S5330C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S5330C1[];
extern void _ZN7S5330C1D1Ev();
extern void _ZN7S5330C1D0Ev();
extern void _ZN10S5330C3_nt2v6Ev();
extern void _ZN10S5330C3_nt2v7Ev();
extern void _ZN10S5330C3_nt2v8Ev();
extern void _ZN10S5330C3_nt2v9Ev();
extern void _ZN10S5330C3_nt3v10Ev();
extern void _ZN10S5330C3_nt3v11Ev();
extern void _ZN10S5330C3_nt3v12Ev();
extern void _ZN10S5330C3_nt3v13Ev();
extern void _ZN10S5330C3_nt3v14Ev();
extern void _ZN10S5330C3_nt3v15Ev();
extern void _ZN10S5330C3_nt3v16Ev();
extern void _ZN10S5330C3_nt3v17Ev();
extern void _ZN10S5330C3_nt3v18Ev();
extern void _ZN10S5330C3_nt3v19Ev();
extern void _ZN10S5330C3_nt3v20Ev();
extern void _ZN10S5330C3_nt3v21Ev();
extern void _ZN10S5330C3_nt3v22Ev();
extern void _ZN10S5330C3_nt3v23Ev();
extern void _ZN10S5330C3_nt3v24Ev();
extern void _ZN10S5330C3_nt3v25Ev();
extern void _ZN10S5330C3_nt3v26Ev();
extern void _ZN10S5330C3_nt3v27Ev();
extern void _ZN10S5330C3_nt3v28Ev();
extern void _ZN10S5330C2_nt3v29Ev();
extern void _ZN10S5330C2_nt3v30Ev();
extern void _ZN10S5330C2_nt3v31Ev();
extern void _ZN10S5330C2_nt3v32Ev();
extern void _ZN10S5330C2_nt3v33Ev();
extern void _ZN10S5330C2_nt3v34Ev();
extern void _ZN10S5330C2_nt3v35Ev();
extern void _ZN10S5330C2_nt3v36Ev();
extern void _ZN10S5330C2_nt3v37Ev();
extern void _ZN10S5330C2_nt3v38Ev();
extern void _ZN10S5330C2_nt3v39Ev();
extern void _ZN10S5330C2_nt3v40Ev();
extern void _ZN10S5330C2_nt3v41Ev();
extern void _ZN10S5330C2_nt3v42Ev();
extern void _ZN10S5330C2_nt3v43Ev();
extern void _ZN10S5330C2_nt3v44Ev();
extern void _ZN10S5330C2_nt3v45Ev();
extern void _ZN10S5330C2_nt3v46Ev();
extern void _ZN10S5330C2_nt3v47Ev();
extern void _ZN10S5330C2_nt3v48Ev();
extern void _ZN10S5330C2_nt3v49Ev();
extern void _ZN10S5330C2_nt3v50Ev();
extern void _ZN10S5330C2_nt3v51Ev();
extern void _ZN10S5330C2_nt3v52Ev();
extern void _ZN10S5330C2_nt3v53Ev();
extern void _ZN10S5330C2_nt3v54Ev();
extern void _ZN10S5330C2_nt3v55Ev();
extern void _ZN10S5330C2_nt3v56Ev();
extern void _ZN10S5330C2_nt3v57Ev();
extern void _ZN10S5330C2_nt3v58Ev();
extern void _ZN10S5330C2_nt3v59Ev();
extern void _ZN10S5330C2_nt3v60Ev();
extern void _ZN10S5330C2_nt3v61Ev();
extern void _ZN10S5330C2_nt3v62Ev();
extern void _ZN10S5330C2_nt3v63Ev();
extern void _ZN10S5330C2_nt3v64Ev();
extern void _ZN10S5330C2_nt3v65Ev();
extern void _ZN10S5330C2_nt3v66Ev();
extern void _ZN10S5330C2_nt3v67Ev();
extern void _ZN10S5330C2_nt3v68Ev();
extern void _ZN10S5330C2_nt3v69Ev();
extern void _ZN10S5330C2_nt3v70Ev();
extern void _ZN10S5330C2_nt3v71Ev();
extern void _ZN10S5330C2_nt3v72Ev();
extern void _ZN10S5330C2_nt3v73Ev();
extern void _ZN10S5330C2_nt3v74Ev();
extern void _ZN10S5330C2_nt3v75Ev();
extern void _ZN10S5330C2_nt3v76Ev();
extern void _ZN10S5330C2_nt3v77Ev();
extern void _ZN10S5330C2_nt3v78Ev();
extern void _ZN10S5330C2_nt3v79Ev();
extern void _ZN10S5330C2_nt3v80Ev();
extern void _ZN10S5330C2_nt3v81Ev();
extern void _ZN10S5330C2_nt3v82Ev();
extern void _ZN10S5330C2_nt3v83Ev();
extern void _ZN10S5330C2_nt3v84Ev();
extern void _ZN10S5330C2_nt3v85Ev();
extern void _ZN10S5330C2_nt3v86Ev();
extern void _ZN10S5330C2_nt3v87Ev();
extern void _ZN10S5330C2_nt3v88Ev();
extern void _ZN10S5330C2_nt3v89Ev();
extern void _ZN10S5330C2_nt3v90Ev();
extern void _ZN10S5330C2_nt3v91Ev();
extern void _ZN10S5330C2_nt3v92Ev();
extern void _ZN10S5330C2_nt3v93Ev();
extern void _ZN10S5330C2_nt3v94Ev();
extern void _ZN10S5330C2_nt3v95Ev();
extern void _ZN10S5330C2_nt3v96Ev();
extern void _ZN10S5330C2_nt3v97Ev();
extern void _ZN10S5330C2_nt3v98Ev();
extern void _ZN10S5330C2_nt3v99Ev();
extern void _ZN10S5330C2_nt4v100Ev();
extern void _ZN10S5330C2_nt4v101Ev();
extern void _ZN10S5330C2_nt4v102Ev();
extern void _ZN10S5330C2_nt4v103Ev();
extern void _ZN10S5330C2_nt4v104Ev();
extern void _ZN10S5330C2_nt4v105Ev();
extern void _ZN10S5330C2_nt4v106Ev();
extern void _ZN7S5330C12v1Ev();
extern void _ZN7S5330C12v2Ev();
extern void _ZN7S5330C12v3Ev();
extern void _ZN7S5330C12v4Ev();
extern void _ZN7S5330C12v5Ev();
static  VTBL_ENTRY vtc_S5330C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5330C1[0]),
  (VTBL_ENTRY)&_ZN7S5330C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5330C1D0Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S5330C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S5330C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN7S5330C12v1Ev,
  (VTBL_ENTRY)&_ZN7S5330C12v2Ev,
  (VTBL_ENTRY)&_ZN7S5330C12v3Ev,
  (VTBL_ENTRY)&_ZN7S5330C12v4Ev,
  (VTBL_ENTRY)&_ZN7S5330C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S5330C1[];
extern  VTBL_ENTRY _ZTV7S5330C1[];
Class_Descriptor cd_S5330C1 = {  "S5330C1", // class name
  bases_S5330C1, 2,
  &(vtc_S5330C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(848,640), // object size
  NSPAIRA(_ZTI7S5330C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5330C1),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C2_nt  {
  int s8715c2f0;
  char s8715c2f1[3];
  virtual  ~S8715C2_nt(); // _ZN10S8715C2_ntD1Ev
  virtual void  v2(); // _ZN10S8715C2_nt2v2Ev
  S8715C2_nt(); // tgen
};
//SIG(-1 S8715C2_nt) C1{ vd v1 Fi Fc[3]}


 S8715C2_nt ::~S8715C2_nt(){ note_dtor("S8715C2_nt", this);}
void  S8715C2_nt ::v2(){vfunc_called(this, "_ZN10S8715C2_nt2v2Ev");}
S8715C2_nt ::S8715C2_nt(){ note_ctor("S8715C2_nt", this);} // tgen

//skip512 S8715C2_nt

#else // __cplusplus

extern void _ZN10S8715C2_ntC1Ev();
extern void _ZN10S8715C2_ntD1Ev();
Name_Map name_map_S8715C2_nt[] = {
  NSPAIR(_ZN10S8715C2_ntC1Ev),
  NSPAIR(_ZN10S8715C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8715C2_nt[];
extern void _ZN10S8715C2_ntD1Ev();
extern void _ZN10S8715C2_ntD0Ev();
extern void _ZN10S8715C2_nt2v2Ev();
static  VTBL_ENTRY vtc_S8715C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8715C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8715C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8715C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8715C2_nt2v2Ev,
};
extern VTBL_ENTRY _ZTI10S8715C2_nt[];
VTBL_ENTRY *P__ZTI10S8715C2_nt = _ZTI10S8715C2_nt; 
extern  VTBL_ENTRY _ZTV10S8715C2_nt[];
Class_Descriptor cd_S8715C2_nt = {  "S8715C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8715C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S8715C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8715C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C5_nt  {
  int s8715c5f0;
};
//SIG(-1 S8715C5_nt) C1{ Fi}



//skip512 S8715C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C4  {
  ::S8715C5_nt s8715c4f0;
  char s8715c4f1;
};
//SIG(-1 S8715C4) C1{ FC2{ Fi} Fc}



static void Test_S8715C4()
{
  {
    init_simple_test("S8715C4");
    S8715C4 lv;
    check2(sizeof(lv), 8, "sizeof(S8715C4)");
    check2(__alignof__(lv), 4, "__alignof__(S8715C4)");
    check_field_offset(lv, s8715c4f0, 0, "S8715C4.s8715c4f0");
    check_field_offset(lv, s8715c4f1, 4, "S8715C4.s8715c4f1");
  }
}
static Arrange_To_Call_Me vS8715C4(Test_S8715C4, "S8715C4", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C8  {
  void *s8715c8f0;
  char s8715c8f1[1024];
  int s8715c8f2[2];
};
//SIG(-1 S8715C8) C1{ Fp Fc[1024] Fi[2]}



static void Test_S8715C8()
{
  {
    init_simple_test("S8715C8");
    S8715C8 lv;
    check2(sizeof(lv), ABISELECT(1040,1036), "sizeof(S8715C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C8)");
    check_field_offset(lv, s8715c8f0, 0, "S8715C8.s8715c8f0");
    check_field_offset(lv, s8715c8f1, ABISELECT(8,4), "S8715C8.s8715c8f1");
    check_field_offset(lv, s8715c8f2, ABISELECT(1032,1028), "S8715C8.s8715c8f2");
  }
}
static Arrange_To_Call_Me vS8715C8(Test_S8715C8, "S8715C8", ABISELECT(1040,1036));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C7  {
  void *s8715c7f0;
  ::S8715C5_nt s8715c7f1;
  void *s8715c7f2;
  ::S8715C8 s8715c7f3;
  short s8715c7f4;
  char s8715c7f5;
};
//SIG(-1 S8715C7) C1{ Fp FC2{ Fi} Fp FC3{ Fp Fc[1024] Fi[2]} Fs Fc}



static void Test_S8715C7()
{
  {
    init_simple_test("S8715C7");
    S8715C7 lv;
    check2(sizeof(lv), ABISELECT(1072,1052), "sizeof(S8715C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C7)");
    check_field_offset(lv, s8715c7f0, 0, "S8715C7.s8715c7f0");
    check_field_offset(lv, s8715c7f1, ABISELECT(8,4), "S8715C7.s8715c7f1");
    check_field_offset(lv, s8715c7f2, ABISELECT(16,8), "S8715C7.s8715c7f2");
    check_field_offset(lv, s8715c7f3, ABISELECT(24,12), "S8715C7.s8715c7f3");
    check_field_offset(lv, s8715c7f4, ABISELECT(1064,1048), "S8715C7.s8715c7f4");
    check_field_offset(lv, s8715c7f5, ABISELECT(1066,1050), "S8715C7.s8715c7f5");
  }
}
static Arrange_To_Call_Me vS8715C7(Test_S8715C7, "S8715C7", ABISELECT(1072,1052));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C11  {
  int s8715c11f0[2];
  void *s8715c11f1[4];
  int s8715c11f2[2];
};
//SIG(-1 S8715C11) C1{ Fi[2] Fp[4] Fi[2]}



static void Test_S8715C11()
{
  {
    init_simple_test("S8715C11");
    S8715C11 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S8715C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C11)");
    check_field_offset(lv, s8715c11f0, 0, "S8715C11.s8715c11f0");
    check_field_offset(lv, s8715c11f1, 8, "S8715C11.s8715c11f1");
    check_field_offset(lv, s8715c11f2, ABISELECT(40,24), "S8715C11.s8715c11f2");
  }
}
static Arrange_To_Call_Me vS8715C11(Test_S8715C11, "S8715C11", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C10  {
  void *s8715c10f0;
  ::S8715C8 s8715c10f1;
  ::S8715C11 s8715c10f2;
  int s8715c10f3[7];
  void *s8715c10f4;
  char s8715c10f5[2051];
};
//SIG(-1 S8715C10) C1{ Fp FC2{ Fp Fc[1024] Fi[2]} FC3{ Fi[2] Fp[4] Fi[2]} Fi[7] Fp Fc[2051]}



static void Test_S8715C10()
{
  {
    init_simple_test("S8715C10");
    S8715C10 lv;
    check2(sizeof(lv), ABISELECT(3192,3156), "sizeof(S8715C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C10)");
    check_field_offset(lv, s8715c10f0, 0, "S8715C10.s8715c10f0");
    check_field_offset(lv, s8715c10f1, ABISELECT(8,4), "S8715C10.s8715c10f1");
    check_field_offset(lv, s8715c10f2, ABISELECT(1048,1040), "S8715C10.s8715c10f2");
    check_field_offset(lv, s8715c10f3, ABISELECT(1096,1072), "S8715C10.s8715c10f3");
    check_field_offset(lv, s8715c10f4, ABISELECT(1128,1100), "S8715C10.s8715c10f4");
    check_field_offset(lv, s8715c10f5, ABISELECT(1136,1104), "S8715C10.s8715c10f5");
  }
}
static Arrange_To_Call_Me vS8715C10(Test_S8715C10, "S8715C10", ABISELECT(3192,3156));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C15  {
  void *s8715c15f0;
  int s8715c15f1;
};
//SIG(-1 S8715C15) C1{ Fp Fi}



static void Test_S8715C15()
{
  {
    init_simple_test("S8715C15");
    S8715C15 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S8715C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C15)");
    check_field_offset(lv, s8715c15f0, 0, "S8715C15.s8715c15f0");
    check_field_offset(lv, s8715c15f1, ABISELECT(8,4), "S8715C15.s8715c15f1");
  }
}
static Arrange_To_Call_Me vS8715C15(Test_S8715C15, "S8715C15", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C14  {
  int s8715c14f0;
  ::S8715C15 s8715c14f1;
};
//SIG(-1 S8715C14) C1{ Fi FC2{ Fp Fi}}



static void Test_S8715C14()
{
  {
    init_simple_test("S8715C14");
    S8715C14 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8715C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C14)");
    check_field_offset(lv, s8715c14f0, 0, "S8715C14.s8715c14f0");
    check_field_offset(lv, s8715c14f1, ABISELECT(8,4), "S8715C14.s8715c14f1");
  }
}
static Arrange_To_Call_Me vS8715C14(Test_S8715C14, "S8715C14", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C13  {
  void *s8715c13f0;
  int s8715c13f1;
  int s8715c13f2;
  int s8715c13f3;
  int s8715c13f4;
  int s8715c13f5;
  int s8715c13f6;
  ::S8715C14 s8715c13f7;
};
//SIG(1 S8715C13) C1{ Fp Fi[6] FC2{ Fi FC3{ Fp Fi}}}



static void Test_S8715C13()
{
  {
    init_simple_test("S8715C13");
    S8715C13 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S8715C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C13)");
    check_field_offset(lv, s8715c13f0, 0, "S8715C13.s8715c13f0");
    check_field_offset(lv, s8715c13f1, ABISELECT(8,4), "S8715C13.s8715c13f1");
    check_field_offset(lv, s8715c13f2, ABISELECT(12,8), "S8715C13.s8715c13f2");
    check_field_offset(lv, s8715c13f3, ABISELECT(16,12), "S8715C13.s8715c13f3");
    check_field_offset(lv, s8715c13f4, ABISELECT(20,16), "S8715C13.s8715c13f4");
    check_field_offset(lv, s8715c13f5, ABISELECT(24,20), "S8715C13.s8715c13f5");
    check_field_offset(lv, s8715c13f6, ABISELECT(28,24), "S8715C13.s8715c13f6");
    check_field_offset(lv, s8715c13f7, ABISELECT(32,28), "S8715C13.s8715c13f7");
  }
}
static Arrange_To_Call_Me vS8715C13(Test_S8715C13, "S8715C13", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S8715C12  {
  ::S8715C13 s8715c12f0;
  ::S8715C13 s8715c12f1;
};
//SIG(1 S8715C12) U1{ FC2{ Fp Fi Fi Fi Fi Fi Fi FC3{ Fi FC4{ Fp Fi}}} FC2}

#endif // __cplusplus
#ifdef __cplusplus

struct  S8715C9  {
  ::S8715C10 s8715c9f0;
  void *s8715c9f1;
  ::S8715C5_nt s8715c9f2;
  ::S8715C12 s8715c9f3;
  char s8715c9f4;
  char s8715c9f5;
  char s8715c9f6;
};
//SIG(-1 S8715C9) C1{ FC2{ Fp FC3{ Fp Fc[1024] Fi[2]} FC4{ Fi[2] Fp[4] Fi[2]} Fi[7] Fp Fc[2051]} Fp FC5{ Fi} FU6{ FC7{ Fp Fi Fi Fi Fi Fi Fi FC8{ Fi FC9{ Fp Fi}}} FC7} Fc Fc Fc}



static void Test_S8715C9()
{
  {
    init_simple_test("S8715C9");
    S8715C9 lv;
    check2(sizeof(lv), ABISELECT(3272,3208), "sizeof(S8715C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C9)");
    check_field_offset(lv, s8715c9f0, 0, "S8715C9.s8715c9f0");
    check_field_offset(lv, s8715c9f1, ABISELECT(3192,3156), "S8715C9.s8715c9f1");
    check_field_offset(lv, s8715c9f2, ABISELECT(3200,3160), "S8715C9.s8715c9f2");
    check_field_offset(lv, s8715c9f3, ABISELECT(3208,3164), "S8715C9.s8715c9f3");
    check_field_offset(lv, s8715c9f4, ABISELECT(3264,3204), "S8715C9.s8715c9f4");
    check_field_offset(lv, s8715c9f5, ABISELECT(3265,3205), "S8715C9.s8715c9f5");
    check_field_offset(lv, s8715c9f6, ABISELECT(3266,3206), "S8715C9.s8715c9f6");
  }
}
static Arrange_To_Call_Me vS8715C9(Test_S8715C9, "S8715C9", ABISELECT(3272,3208));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C21  {
  void *s8715c21f0;
};
//SIG(1 S8715C21) C1{ Fp}



static void Test_S8715C21()
{
  {
    init_simple_test("S8715C21");
    S8715C21 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8715C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C21)");
    check_field_offset(lv, s8715c21f0, 0, "S8715C21.s8715c21f0");
  }
}
static Arrange_To_Call_Me vS8715C21(Test_S8715C21, "S8715C21", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C25  {
  char s8715c25f0[4];
  char s8715c25f1[4];
  int s8715c25f2;
  int s8715c25f3;
  int s8715c25f4;
  int s8715c25f5;
  int s8715c25f6;
  int s8715c25f7;
  int s8715c25f8;
};
//SIG(1 S8715C25) C1{ Fc[8] Fi[7]}



static void Test_S8715C25()
{
  {
    init_simple_test("S8715C25");
    S8715C25 lv;
    check2(sizeof(lv), 36, "sizeof(S8715C25)");
    check2(__alignof__(lv), 4, "__alignof__(S8715C25)");
    check_field_offset(lv, s8715c25f0, 0, "S8715C25.s8715c25f0");
    check_field_offset(lv, s8715c25f1, 4, "S8715C25.s8715c25f1");
    check_field_offset(lv, s8715c25f2, 8, "S8715C25.s8715c25f2");
    check_field_offset(lv, s8715c25f3, 12, "S8715C25.s8715c25f3");
    check_field_offset(lv, s8715c25f4, 16, "S8715C25.s8715c25f4");
    check_field_offset(lv, s8715c25f5, 20, "S8715C25.s8715c25f5");
    check_field_offset(lv, s8715c25f6, 24, "S8715C25.s8715c25f6");
    check_field_offset(lv, s8715c25f7, 28, "S8715C25.s8715c25f7");
    check_field_offset(lv, s8715c25f8, 32, "S8715C25.s8715c25f8");
  }
}
static Arrange_To_Call_Me vS8715C25(Test_S8715C25, "S8715C25", 36);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C26_nt  {
  int s8715c26f0;
  int s8715c26f1;
  int s8715c26f2;
  int s8715c26f3;
};
//SIG(-1 S8715C26_nt) C1{ Fi[4]}



//skip512 S8715C26_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C27  {
  int s8715c27f0;
  int s8715c27f1;
  int s8715c27f2;
  int s8715c27f3;
  int s8715c27f4;
  int s8715c27f5;
  int s8715c27f6;
  int s8715c27f7;
  int s8715c27f8;
  int s8715c27f9;
  int s8715c27f10;
  int s8715c27f11;
  int s8715c27f12;
};
//SIG(1 S8715C27) C1{ Fi[13]}



static void Test_S8715C27()
{
  {
    init_simple_test("S8715C27");
    S8715C27 lv;
    check2(sizeof(lv), 52, "sizeof(S8715C27)");
    check2(__alignof__(lv), 4, "__alignof__(S8715C27)");
    check_field_offset(lv, s8715c27f0, 0, "S8715C27.s8715c27f0");
    check_field_offset(lv, s8715c27f1, 4, "S8715C27.s8715c27f1");
    check_field_offset(lv, s8715c27f2, 8, "S8715C27.s8715c27f2");
    check_field_offset(lv, s8715c27f3, 12, "S8715C27.s8715c27f3");
    check_field_offset(lv, s8715c27f4, 16, "S8715C27.s8715c27f4");
    check_field_offset(lv, s8715c27f5, 20, "S8715C27.s8715c27f5");
    check_field_offset(lv, s8715c27f6, 24, "S8715C27.s8715c27f6");
    check_field_offset(lv, s8715c27f7, 28, "S8715C27.s8715c27f7");
    check_field_offset(lv, s8715c27f8, 32, "S8715C27.s8715c27f8");
    check_field_offset(lv, s8715c27f9, 36, "S8715C27.s8715c27f9");
    check_field_offset(lv, s8715c27f10, 40, "S8715C27.s8715c27f10");
    check_field_offset(lv, s8715c27f11, 44, "S8715C27.s8715c27f11");
    check_field_offset(lv, s8715c27f12, 48, "S8715C27.s8715c27f12");
  }
}
static Arrange_To_Call_Me vS8715C27(Test_S8715C27, "S8715C27", 52);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C28  {
  char s8715c28f0;
  int s8715c28f1;
  int s8715c28f2;
  char s8715c28f3;
};
//SIG(1 S8715C28) C1{ Fc Fi[2] Fc}



static void Test_S8715C28()
{
  {
    init_simple_test("S8715C28");
    S8715C28 lv;
    check2(sizeof(lv), 16, "sizeof(S8715C28)");
    check2(__alignof__(lv), 4, "__alignof__(S8715C28)");
    check_field_offset(lv, s8715c28f0, 0, "S8715C28.s8715c28f0");
    check_field_offset(lv, s8715c28f1, 4, "S8715C28.s8715c28f1");
    check_field_offset(lv, s8715c28f2, 8, "S8715C28.s8715c28f2");
    check_field_offset(lv, s8715c28f3, 12, "S8715C28.s8715c28f3");
  }
}
static Arrange_To_Call_Me vS8715C28(Test_S8715C28, "S8715C28", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C29  {
  char s8715c29f0[4];
  int s8715c29f1;
  int s8715c29f2;
  int s8715c29f3;
  int s8715c29f4;
  int s8715c29f5;
  int s8715c29f6;
  int s8715c29f7;
};
//SIG(1 S8715C29) C1{ Fc[4] Fi[7]}



static void Test_S8715C29()
{
  {
    init_simple_test("S8715C29");
    S8715C29 lv;
    check2(sizeof(lv), 32, "sizeof(S8715C29)");
    check2(__alignof__(lv), 4, "__alignof__(S8715C29)");
    check_field_offset(lv, s8715c29f0, 0, "S8715C29.s8715c29f0");
    check_field_offset(lv, s8715c29f1, 4, "S8715C29.s8715c29f1");
    check_field_offset(lv, s8715c29f2, 8, "S8715C29.s8715c29f2");
    check_field_offset(lv, s8715c29f3, 12, "S8715C29.s8715c29f3");
    check_field_offset(lv, s8715c29f4, 16, "S8715C29.s8715c29f4");
    check_field_offset(lv, s8715c29f5, 20, "S8715C29.s8715c29f5");
    check_field_offset(lv, s8715c29f6, 24, "S8715C29.s8715c29f6");
    check_field_offset(lv, s8715c29f7, 28, "S8715C29.s8715c29f7");
  }
}
static Arrange_To_Call_Me vS8715C29(Test_S8715C29, "S8715C29", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S8715C24  {
  char s8715c24f0[64];
  ::S8715C25 s8715c24f1;
  ::S8715C26_nt s8715c24f2;
  ::S8715C27 s8715c24f3;
  ::S8715C28 s8715c24f4;
  ::S8715C29 s8715c24f5;
};
//SIG(1 S8715C24) U1{ Fc[64] FC2{ Fc[4] Fc[4] Fi Fi Fi Fi Fi Fi Fi} FC3{ Fi Fi Fi Fi} FC4{ Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi} FC5{ Fc Fi Fi Fc} FC6{ Fc[4] Fi Fi Fi Fi Fi Fi Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S8715C23  {
  int s8715c23f0;
  void *s8715c23f1;
  int s8715c23f2;
  int s8715c23f3;
  void *s8715c23f4;
  int s8715c23f5;
  void *s8715c23f6;
  int s8715c23f7;
  ::S8715C24 s8715c23f8;
};
//SIG(-1 S8715C23) C1{ Fi Fp Fi[2] Fp Fi Fp Fi FU2{ Fc[64] FC3{ Fc[4] Fc[4] Fi Fi Fi Fi Fi Fi Fi} FC4{ Fi Fi Fi Fi} FC5{ Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi} FC6{ Fc Fi Fi Fc} FC7{ Fc[4] Fi Fi Fi Fi Fi Fi Fi}}}



static void Test_S8715C23()
{
  {
    init_simple_test("S8715C23");
    S8715C23 lv;
    check2(sizeof(lv), ABISELECT(120,96), "sizeof(S8715C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C23)");
    check_field_offset(lv, s8715c23f0, 0, "S8715C23.s8715c23f0");
    check_field_offset(lv, s8715c23f1, ABISELECT(8,4), "S8715C23.s8715c23f1");
    check_field_offset(lv, s8715c23f2, ABISELECT(16,8), "S8715C23.s8715c23f2");
    check_field_offset(lv, s8715c23f3, ABISELECT(20,12), "S8715C23.s8715c23f3");
    check_field_offset(lv, s8715c23f4, ABISELECT(24,16), "S8715C23.s8715c23f4");
    check_field_offset(lv, s8715c23f5, ABISELECT(32,20), "S8715C23.s8715c23f5");
    check_field_offset(lv, s8715c23f6, ABISELECT(40,24), "S8715C23.s8715c23f6");
    check_field_offset(lv, s8715c23f7, ABISELECT(48,28), "S8715C23.s8715c23f7");
    check_field_offset(lv, s8715c23f8, ABISELECT(52,32), "S8715C23.s8715c23f8");
  }
}
static Arrange_To_Call_Me vS8715C23(Test_S8715C23, "S8715C23", ABISELECT(120,96));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C22  {
  ::S8715C23 s8715c22f0;
};
//SIG(1 S8715C22) C1{ FC2{ Fi Fp Fi[2] Fp Fi Fp Fi FU3{ Fc[64] FC4{ Fc[4] Fc[4] Fi Fi Fi Fi Fi Fi Fi} FC5{ Fi Fi Fi Fi} FC6{ Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi} FC7{ Fc Fi Fi Fc} FC8{ Fc[4] Fi Fi Fi Fi Fi Fi Fi}}}}



static void Test_S8715C22()
{
  {
    init_simple_test("S8715C22");
    S8715C22 lv;
    check2(sizeof(lv), ABISELECT(120,96), "sizeof(S8715C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C22)");
    check_field_offset(lv, s8715c22f0, 0, "S8715C22.s8715c22f0");
  }
}
static Arrange_To_Call_Me vS8715C22(Test_S8715C22, "S8715C22", ABISELECT(120,96));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S8715C20  {
  ::S8715C21 s8715c20f0;
  ::S8715C22 s8715c20f1;
};
//SIG(1 S8715C20) U1{ FC2{ Fp} FC3{ FC4{ Fi Fp Fi Fi Fp Fi Fp Fi FU5{ Fc[64] FC6{ Fc[4] Fc[4] Fi Fi Fi Fi Fi Fi Fi} FC7{ Fi Fi Fi Fi} FC8{ Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi} FC9{ Fc Fi Fi Fc} FC10{ Fc[4] Fi Fi Fi Fi Fi Fi Fi}}}}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S8715C19  {
  ::S8715C10 s8715c19f0;
  void *s8715c19f1;
  ::S8715C5_nt s8715c19f2;
  int s8715c19f3;
  int s8715c19f4;
  int s8715c19f5;
  int s8715c19f6;
  ::S8715C20 s8715c19f7;
  short s8715c19f8;
  char s8715c19f9;
};
//SIG(-1 S8715C19) C1{ FC2{ Fp FC3{ Fp Fc[1024] Fi[2]} FC4{ Fi[2] Fp[4] Fi[2]} Fi[7] Fp Fc[2051]} Fp FC5{ Fi} Fi[4] FU6{ FC7{ Fp} FC8{ FC9{ Fi Fp Fi Fi Fp Fi Fp Fi FU10{ Fc[64] FC11{ Fc[4] Fc[4] Fi Fi Fi Fi Fi Fi Fi} FC12{ Fi Fi Fi Fi} FC13{ Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi} FC14{ Fc Fi Fi Fc} FC15{ Fc[4] Fi Fi Fi Fi Fi Fi Fi}}}}} Fs Fc}



static void Test_S8715C19()
{
  {
    init_simple_test("S8715C19");
    S8715C19 lv;
    check2(sizeof(lv), ABISELECT(3352,3280), "sizeof(S8715C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C19)");
    check_field_offset(lv, s8715c19f0, 0, "S8715C19.s8715c19f0");
    check_field_offset(lv, s8715c19f1, ABISELECT(3192,3156), "S8715C19.s8715c19f1");
    check_field_offset(lv, s8715c19f2, ABISELECT(3200,3160), "S8715C19.s8715c19f2");
    check_field_offset(lv, s8715c19f3, ABISELECT(3204,3164), "S8715C19.s8715c19f3");
    check_field_offset(lv, s8715c19f4, ABISELECT(3208,3168), "S8715C19.s8715c19f4");
    check_field_offset(lv, s8715c19f5, ABISELECT(3212,3172), "S8715C19.s8715c19f5");
    check_field_offset(lv, s8715c19f6, ABISELECT(3216,3176), "S8715C19.s8715c19f6");
    check_field_offset(lv, s8715c19f7, ABISELECT(3224,3180), "S8715C19.s8715c19f7");
    check_field_offset(lv, s8715c19f8, ABISELECT(3344,3276), "S8715C19.s8715c19f8");
    check_field_offset(lv, s8715c19f9, ABISELECT(3346,3278), "S8715C19.s8715c19f9");
  }
}
static Arrange_To_Call_Me vS8715C19(Test_S8715C19, "S8715C19", ABISELECT(3352,3280));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C31  {
  int s8715c31f0;
  int s8715c31f1;
  int s8715c31f2;
  int s8715c31f3;
  int s8715c31f4;
  void *s8715c31f5;
  void *s8715c31f6;
  void *s8715c31f7;
};
//SIG(-1 S8715C31) C1{ Fi[5] Fp[3]}



static void Test_S8715C31()
{
  {
    init_simple_test("S8715C31");
    S8715C31 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S8715C31)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C31)");
    check_field_offset(lv, s8715c31f0, 0, "S8715C31.s8715c31f0");
    check_field_offset(lv, s8715c31f1, 4, "S8715C31.s8715c31f1");
    check_field_offset(lv, s8715c31f2, 8, "S8715C31.s8715c31f2");
    check_field_offset(lv, s8715c31f3, 12, "S8715C31.s8715c31f3");
    check_field_offset(lv, s8715c31f4, 16, "S8715C31.s8715c31f4");
    check_field_offset(lv, s8715c31f5, ABISELECT(24,20), "S8715C31.s8715c31f5");
    check_field_offset(lv, s8715c31f6, ABISELECT(32,24), "S8715C31.s8715c31f6");
    check_field_offset(lv, s8715c31f7, ABISELECT(40,28), "S8715C31.s8715c31f7");
  }
}
static Arrange_To_Call_Me vS8715C31(Test_S8715C31, "S8715C31", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C30  {
  void *s8715c30f0;
  int s8715c30f1;
  ::S8715C5_nt s8715c30f2;
  ::S8715C8 s8715c30f3;
  ::S8715C31 s8715c30f4;
  char s8715c30f5[2048];
};
//SIG(-1 S8715C30) C1{ Fp Fi FC2{ Fi} FC3{ Fp Fc[1024] Fi[2]} FC4{ Fi[5] Fp[3]} Fc[2048]}



static void Test_S8715C30()
{
  {
    init_simple_test("S8715C30");
    S8715C30 lv;
    check2(sizeof(lv), ABISELECT(3152,3128), "sizeof(S8715C30)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C30)");
    check_field_offset(lv, s8715c30f0, 0, "S8715C30.s8715c30f0");
    check_field_offset(lv, s8715c30f1, ABISELECT(8,4), "S8715C30.s8715c30f1");
    check_field_offset(lv, s8715c30f2, ABISELECT(12,8), "S8715C30.s8715c30f2");
    check_field_offset(lv, s8715c30f3, ABISELECT(16,12), "S8715C30.s8715c30f3");
    check_field_offset(lv, s8715c30f4, ABISELECT(1056,1048), "S8715C30.s8715c30f4");
    check_field_offset(lv, s8715c30f5, ABISELECT(1104,1080), "S8715C30.s8715c30f5");
  }
}
static Arrange_To_Call_Me vS8715C30(Test_S8715C30, "S8715C30", ABISELECT(3152,3128));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C33  {
  char s8715c33f0[16];
  char s8715c33f1[16];
  char s8715c33f2[16];
  char s8715c33f3[28];
  char s8715c33f4;
};
//SIG(-1 S8715C33) C1{ Fc[77]}



static void Test_S8715C33()
{
  {
    init_simple_test("S8715C33");
    S8715C33 lv;
    check2(sizeof(lv), 77, "sizeof(S8715C33)");
    check2(__alignof__(lv), 1, "__alignof__(S8715C33)");
    check_field_offset(lv, s8715c33f0, 0, "S8715C33.s8715c33f0");
    check_field_offset(lv, s8715c33f1, 16, "S8715C33.s8715c33f1");
    check_field_offset(lv, s8715c33f2, 32, "S8715C33.s8715c33f2");
    check_field_offset(lv, s8715c33f3, 48, "S8715C33.s8715c33f3");
    check_field_offset(lv, s8715c33f4, 76, "S8715C33.s8715c33f4");
  }
}
static Arrange_To_Call_Me vS8715C33(Test_S8715C33, "S8715C33", 77);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C32  {
  void *s8715c32f0;
  ::S8715C33 s8715c32f1;
  ::S8715C5_nt s8715c32f2;
  ::S8715C8 s8715c32f3;
  ::S8715C31 s8715c32f4;
  char s8715c32f5[2048];
};
//SIG(-1 S8715C32) C1{ Fp FC2{ Fc[77]} FC3{ Fi} FC4{ Fp Fc[1024] Fi[2]} FC5{ Fi[5] Fp[3]} Fc[2048]}



static void Test_S8715C32()
{
  {
    init_simple_test("S8715C32");
    S8715C32 lv;
    check2(sizeof(lv), ABISELECT(3232,3204), "sizeof(S8715C32)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C32)");
    check_field_offset(lv, s8715c32f0, 0, "S8715C32.s8715c32f0");
    check_field_offset(lv, s8715c32f1, ABISELECT(8,4), "S8715C32.s8715c32f1");
    check_field_offset(lv, s8715c32f2, ABISELECT(88,84), "S8715C32.s8715c32f2");
    check_field_offset(lv, s8715c32f3, ABISELECT(96,88), "S8715C32.s8715c32f3");
    check_field_offset(lv, s8715c32f4, ABISELECT(1136,1124), "S8715C32.s8715c32f4");
    check_field_offset(lv, s8715c32f5, ABISELECT(1184,1156), "S8715C32.s8715c32f5");
  }
}
static Arrange_To_Call_Me vS8715C32(Test_S8715C32, "S8715C32", ABISELECT(3232,3204));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C35  {
  char s8715c35f0[33];
  char s8715c35f1[64];
  char s8715c35f2[61];
  char s8715c35f3[65];
  char s8715c35f4[6];
  char s8715c35f5[125];
  char s8715c35f6;
  char s8715c35f7[16];
};
//SIG(-1 S8715C35) C1{ Fc[371]}



static void Test_S8715C35()
{
  {
    init_simple_test("S8715C35");
    S8715C35 lv;
    check2(sizeof(lv), 371, "sizeof(S8715C35)");
    check2(__alignof__(lv), 1, "__alignof__(S8715C35)");
    check_field_offset(lv, s8715c35f0, 0, "S8715C35.s8715c35f0");
    check_field_offset(lv, s8715c35f1, 33, "S8715C35.s8715c35f1");
    check_field_offset(lv, s8715c35f2, 97, "S8715C35.s8715c35f2");
    check_field_offset(lv, s8715c35f3, 158, "S8715C35.s8715c35f3");
    check_field_offset(lv, s8715c35f4, 223, "S8715C35.s8715c35f4");
    check_field_offset(lv, s8715c35f5, 229, "S8715C35.s8715c35f5");
    check_field_offset(lv, s8715c35f6, 354, "S8715C35.s8715c35f6");
    check_field_offset(lv, s8715c35f7, 355, "S8715C35.s8715c35f7");
  }
}
static Arrange_To_Call_Me vS8715C35(Test_S8715C35, "S8715C35", 371);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C37_nt  {
  char s8715c37f0[16];
};
//SIG(-1 S8715C37_nt) C1{ Fc[16]}



//skip512 S8715C37_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C38  {
  char s8715c38f0[6];
};
//SIG(-1 S8715C38) C1{ Fc[6]}



static void Test_S8715C38()
{
  {
    init_simple_test("S8715C38");
    S8715C38 lv;
    check2(sizeof(lv), 6, "sizeof(S8715C38)");
    check2(__alignof__(lv), 1, "__alignof__(S8715C38)");
    check_field_offset(lv, s8715c38f0, 0, "S8715C38.s8715c38f0");
  }
}
static Arrange_To_Call_Me vS8715C38(Test_S8715C38, "S8715C38", 6);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C36  {
  ::S8715C37_nt s8715c36f0;
  ::S8715C38 s8715c36f1;
  void *s8715c36f2;
  char s8715c36f3;
  char s8715c36f4;
  char s8715c36f5;
};
//SIG(-1 S8715C36) C1{ FC2{ Fc[16]} FC3{ Fc[6]} Fp Fc[3]}



static void Test_S8715C36()
{
  {
    init_simple_test("S8715C36");
    S8715C36 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S8715C36)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C36)");
    check_field_offset(lv, s8715c36f0, 0, "S8715C36.s8715c36f0");
    check_field_offset(lv, s8715c36f1, 16, "S8715C36.s8715c36f1");
    check_field_offset(lv, s8715c36f2, 24, "S8715C36.s8715c36f2");
    check_field_offset(lv, s8715c36f3, ABISELECT(32,28), "S8715C36.s8715c36f3");
    check_field_offset(lv, s8715c36f4, ABISELECT(33,29), "S8715C36.s8715c36f4");
    check_field_offset(lv, s8715c36f5, ABISELECT(34,30), "S8715C36.s8715c36f5");
  }
}
static Arrange_To_Call_Me vS8715C36(Test_S8715C36, "S8715C36", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C40  {
  char s8715c40f0;
  char s8715c40f1;
  short s8715c40f2;
  ::S8715C5_nt s8715c40f3;
  short s8715c40f4;
  char s8715c40f5[6];
};
//SIG(-1 S8715C40) C1{ Fc[2] Fs FC2{ Fi} Fs Fc[6]}



static void Test_S8715C40()
{
  {
    init_simple_test("S8715C40");
    S8715C40 lv;
    check2(sizeof(lv), 16, "sizeof(S8715C40)");
    check2(__alignof__(lv), 4, "__alignof__(S8715C40)");
    check_field_offset(lv, s8715c40f0, 0, "S8715C40.s8715c40f0");
    check_field_offset(lv, s8715c40f1, 1, "S8715C40.s8715c40f1");
    check_field_offset(lv, s8715c40f2, 2, "S8715C40.s8715c40f2");
    check_field_offset(lv, s8715c40f3, 4, "S8715C40.s8715c40f3");
    check_field_offset(lv, s8715c40f4, 8, "S8715C40.s8715c40f4");
    check_field_offset(lv, s8715c40f5, 10, "S8715C40.s8715c40f5");
  }
}
static Arrange_To_Call_Me vS8715C40(Test_S8715C40, "S8715C40", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C39  {
  int s8715c39f0;
  int s8715c39f1;
  int s8715c39f2;
  char s8715c39f3[125];
  char s8715c39f4[32];
  short s8715c39f5;
  char s8715c39f6[25];
  ::S8715C40 s8715c39f7;
  int s8715c39f8;
  short s8715c39f9;
  short s8715c39f10;
  char s8715c39f11;
  char s8715c39f12;
  char s8715c39f13;
  char s8715c39f14;
  char s8715c39f15;
};
//SIG(-1 S8715C39) C1{ Fi[3] Fc[157] Fs Fc[25] FC2{ Fc[2] Fs FC3{ Fi} Fs Fc[6]} Fi Fs[2] Fc[5]}



static void Test_S8715C39()
{
  {
    init_simple_test("S8715C39");
    S8715C39 lv;
    check2(sizeof(lv), 232, "sizeof(S8715C39)");
    check2(__alignof__(lv), 4, "__alignof__(S8715C39)");
    check_field_offset(lv, s8715c39f0, 0, "S8715C39.s8715c39f0");
    check_field_offset(lv, s8715c39f1, 4, "S8715C39.s8715c39f1");
    check_field_offset(lv, s8715c39f2, 8, "S8715C39.s8715c39f2");
    check_field_offset(lv, s8715c39f3, 12, "S8715C39.s8715c39f3");
    check_field_offset(lv, s8715c39f4, 137, "S8715C39.s8715c39f4");
    check_field_offset(lv, s8715c39f5, 170, "S8715C39.s8715c39f5");
    check_field_offset(lv, s8715c39f6, 172, "S8715C39.s8715c39f6");
    check_field_offset(lv, s8715c39f7, 200, "S8715C39.s8715c39f7");
    check_field_offset(lv, s8715c39f8, 216, "S8715C39.s8715c39f8");
    check_field_offset(lv, s8715c39f9, 220, "S8715C39.s8715c39f9");
    check_field_offset(lv, s8715c39f10, 222, "S8715C39.s8715c39f10");
    check_field_offset(lv, s8715c39f11, 224, "S8715C39.s8715c39f11");
    check_field_offset(lv, s8715c39f12, 225, "S8715C39.s8715c39f12");
    check_field_offset(lv, s8715c39f13, 226, "S8715C39.s8715c39f13");
    check_field_offset(lv, s8715c39f14, 227, "S8715C39.s8715c39f14");
    check_field_offset(lv, s8715c39f15, 228, "S8715C39.s8715c39f15");
  }
}
static Arrange_To_Call_Me vS8715C39(Test_S8715C39, "S8715C39", 232);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C34  {
  ::S8715C35 s8715c34f0;
  ::S8715C36 s8715c34f1;
  ::S8715C33 s8715c34f2;
  ::S8715C39 s8715c34f3;
  void *s8715c34f4;
  void *s8715c34f5;
};
//SIG(-1 S8715C34) C1{ FC2{ Fc[371]} FC3{ FC4{ Fc[16]} FC5{ Fc[6]} Fp Fc[3]} FC6{ Fc[77]} FC7{ Fi[3] Fc[157] Fs Fc[25] FC8{ Fc[2] Fs FC9{ Fi} Fs Fc[6]} Fi Fs[2] Fc[5]} Fp[2]}



static void Test_S8715C34()
{
  {
    init_simple_test("S8715C34");
    S8715C34 lv;
    check2(sizeof(lv), ABISELECT(744,724), "sizeof(S8715C34)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C34)");
    check_field_offset(lv, s8715c34f0, 0, "S8715C34.s8715c34f0");
    check_field_offset(lv, s8715c34f1, ABISELECT(376,372), "S8715C34.s8715c34f1");
    check_field_offset(lv, s8715c34f2, ABISELECT(416,404), "S8715C34.s8715c34f2");
    check_field_offset(lv, s8715c34f3, ABISELECT(496,484), "S8715C34.s8715c34f3");
    check_field_offset(lv, s8715c34f4, ABISELECT(728,716), "S8715C34.s8715c34f4");
    check_field_offset(lv, s8715c34f5, ABISELECT(736,720), "S8715C34.s8715c34f5");
  }
}
static Arrange_To_Call_Me vS8715C34(Test_S8715C34, "S8715C34", ABISELECT(744,724));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C6  {
  ::S8715C7 s8715c6f0;
  ::S8715C9 s8715c6f1;
  ::S8715C19 s8715c6f2;
  ::S8715C30 s8715c6f3;
  ::S8715C32 s8715c6f4;
  ::S8715C34 s8715c6f5;
  ::S8715C31 s8715c6f6;
};
//SIG(-1 S8715C6) C1{ FC2{ Fp FC3{ Fi} Fp FC4{ Fp Fc[1024] Fi[2]} Fs Fc} FC5{ FC6{ Fp FC4 FC7{ Fi[2] Fp[4] Fi[2]} Fi[7] Fp Fc[2051]} Fp FC3 FU8{ FC9{ Fp Fi Fi Fi Fi Fi Fi FC10{ Fi FC11{ Fp Fi}}} FC9} Fc Fc Fc} FC12{ FC6 Fp FC3 Fi Fi Fi Fi FU13{ FC14{ Fp} FC15{ FC16{ Fi Fp Fi Fi Fp Fi Fp Fi FU17{ Fc[64] FC18{ Fc[4] Fc[4] Fi Fi Fi Fi Fi Fi Fi} FC19{ Fi Fi Fi Fi} FC20{ Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi} FC21{ Fc Fi Fi Fc} FC22{ Fc[4] Fi Fi Fi Fi Fi Fi Fi}}}}} Fs Fc} FC23{ Fp Fi FC3 FC4 FC24{ Fi Fi Fi Fi Fi Fp Fp Fp} Fc[2048]} FC25{ Fp FC26{ Fc[16] Fc[16] Fc[16] Fc[28] Fc} FC3 FC4 FC24 Fc[2048]} FC27{ FC28{ Fc[33] Fc[64] Fc[61] Fc[65] Fc[6] Fc[125] Fc Fc[16]} FC29{ FC30{ Fc[16]} FC31{ Fc[6]} Fp Fc Fc Fc} FC26 FC32{ Fi Fi Fi Fc[125] Fc[32] Fs Fc[25] FC33{ Fc Fc Fs FC3 Fs Fc[6]} Fi Fs Fs Fc Fc Fc Fc Fc} Fp Fp} FC24}



static void Test_S8715C6()
{
  {
    init_simple_test("S8715C6");
    S8715C6 lv;
    check2(sizeof(lv), ABISELECT(14872,14628), "sizeof(S8715C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C6)");
    check_field_offset(lv, s8715c6f0, 0, "S8715C6.s8715c6f0");
    check_field_offset(lv, s8715c6f1, ABISELECT(1072,1052), "S8715C6.s8715c6f1");
    check_field_offset(lv, s8715c6f2, ABISELECT(4344,4260), "S8715C6.s8715c6f2");
    check_field_offset(lv, s8715c6f3, ABISELECT(7696,7540), "S8715C6.s8715c6f3");
    check_field_offset(lv, s8715c6f4, ABISELECT(10848,10668), "S8715C6.s8715c6f4");
    check_field_offset(lv, s8715c6f5, ABISELECT(14080,13872), "S8715C6.s8715c6f5");
    check_field_offset(lv, s8715c6f6, ABISELECT(14824,14596), "S8715C6.s8715c6f6");
  }
}
static Arrange_To_Call_Me vS8715C6(Test_S8715C6, "S8715C6", ABISELECT(14872,14628));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C3  {
  void *s8715c3f0[2];
  ::S8715C4 s8715c3f1;
  ::S8715C6 s8715c3f2;
  char s8715c3f3;
  char s8715c3f4;
};
//SIG(-1 S8715C3) C1{ Fp[2] FC2{ FC3{ Fi} Fc} FC4{ FC5{ Fp FC3 Fp FC6{ Fp Fc[1024] Fi[2]} Fs Fc} FC7{ FC8{ Fp FC6 FC9{ Fi[2] Fp[4] Fi[2]} Fi[7] Fp Fc[2051]} Fp FC3 FU10{ FC11{ Fp Fi Fi Fi Fi Fi Fi FC12{ Fi FC13{ Fp Fi}}} FC11} Fc Fc Fc} FC14{ FC8 Fp FC3 Fi Fi Fi Fi FU15{ FC16{ Fp} FC17{ FC18{ Fi Fp Fi Fi Fp Fi Fp Fi FU19{ Fc[64] FC20{ Fc[4] Fc[4] Fi Fi Fi Fi Fi Fi Fi} FC21{ Fi Fi Fi Fi} FC22{ Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi} FC23{ Fc Fi Fi Fc} FC24{ Fc[4] Fi Fi Fi Fi Fi Fi Fi}}}}} Fs Fc} FC25{ Fp Fi FC3 FC6 FC26{ Fi Fi Fi Fi Fi Fp Fp Fp} Fc[2048]} FC27{ Fp FC28{ Fc[16] Fc[16] Fc[16] Fc[28] Fc} FC3 FC6 FC26 Fc[2048]} FC29{ FC30{ Fc[33] Fc[64] Fc[61] Fc[65] Fc[6] Fc[125] Fc Fc[16]} FC31{ FC32{ Fc[16]} FC33{ Fc[6]} Fp Fc Fc Fc} FC28 FC34{ Fi Fi Fi Fc[125] Fc[32] Fs Fc[25] FC35{ Fc Fc Fs FC3 Fs Fc[6]} Fi Fs Fs Fc Fc Fc Fc Fc} Fp Fp} FC26} Fc Fc}



static void Test_S8715C3()
{
  {
    init_simple_test("S8715C3");
    S8715C3 lv;
    check2(sizeof(lv), ABISELECT(14904,14648), "sizeof(S8715C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C3)");
    check_field_offset(lv, s8715c3f0, 0, "S8715C3.s8715c3f0");
    check_field_offset(lv, s8715c3f1, ABISELECT(16,8), "S8715C3.s8715c3f1");
    check_field_offset(lv, s8715c3f2, ABISELECT(24,16), "S8715C3.s8715c3f2");
    check_field_offset(lv, s8715c3f3, ABISELECT(14896,14644), "S8715C3.s8715c3f3");
    check_field_offset(lv, s8715c3f4, ABISELECT(14897,14645), "S8715C3.s8715c3f4");
  }
}
static Arrange_To_Call_Me vS8715C3(Test_S8715C3, "S8715C3", ABISELECT(14904,14648));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8715C1  : S8715C2_nt {
  ::S8715C3 s8715c1f0;
  void *s8715c1f1;
  void *s8715c1f2;
  void *s8715c1f3;
  virtual  ~S8715C1(); // _ZN7S8715C1D1Ev
  virtual void  v1(); // _ZN7S8715C12v1Ev
  S8715C1(); // tgen
};
//SIG(1 S8715C1) C1{ BC2{ vd v2 Fi Fc[3]} vd v1 FC3{ Fp[2] FC4{ FC5{ Fi} Fc} FC6{ FC7{ Fp FC5 Fp FC8{ Fp Fc[1024] Fi[2]} Fs Fc} FC9{ FC10{ Fp FC8 FC11{ Fi[2] Fp[4] Fi[2]} Fi[7] Fp Fc[2051]} Fp FC5 FU12{ FC13{ Fp Fi Fi Fi Fi Fi Fi FC14{ Fi FC15{ Fp Fi}}} FC13} Fc Fc Fc} FC16{ FC10 Fp FC5 Fi Fi Fi Fi FU17{ FC18{ Fp} FC19{ FC20{ Fi Fp Fi Fi Fp Fi Fp Fi FU21{ Fc[64] FC22{ Fc[4] Fc[4] Fi Fi Fi Fi Fi Fi Fi} FC23{ Fi Fi Fi Fi} FC24{ Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi} FC25{ Fc Fi Fi Fc} FC26{ Fc[4] Fi Fi Fi Fi Fi Fi Fi}}}}} Fs Fc} FC27{ Fp Fi FC5 FC8 FC28{ Fi Fi Fi Fi Fi Fp Fp Fp} Fc[2048]} FC29{ Fp FC30{ Fc[16] Fc[16] Fc[16] Fc[28] Fc} FC5 FC8 FC28 Fc[2048]} FC31{ FC32{ Fc[33] Fc[64] Fc[61] Fc[65] Fc[6] Fc[125] Fc Fc[16]} FC33{ FC34{ Fc[16]} FC35{ Fc[6]} Fp Fc Fc Fc} FC30 FC36{ Fi Fi Fi Fc[125] Fc[32] Fs Fc[25] FC37{ Fc Fc Fs FC5 Fs Fc[6]} Fi Fs Fs Fc Fc Fc Fc Fc} Fp Fp} FC28} Fc Fc} Fp Fp Fp}


 S8715C1 ::~S8715C1(){ note_dtor("S8715C1", this);}
void  S8715C1 ::v1(){vfunc_called(this, "_ZN7S8715C12v1Ev");}
S8715C1 ::S8715C1(){ note_ctor("S8715C1", this);} // tgen

static void Test_S8715C1()
{
  extern Class_Descriptor cd_S8715C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1869,3669)];
    init_test(&cd_S8715C1, buf);
    S8715C1 *dp, &lv = *(dp=new (buf) S8715C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14944,14672), "sizeof(S8715C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8715C1)");
    check_base_class_offset(lv, (S8715C2_nt*), 0, "S8715C1");
    check_field_offset(lv, s8715c1f0, ABISELECT(16,12), "S8715C1.s8715c1f0");
    check_field_offset(lv, s8715c1f1, ABISELECT(14920,14660), "S8715C1.s8715c1f1");
    check_field_offset(lv, s8715c1f2, ABISELECT(14928,14664), "S8715C1.s8715c1f2");
    check_field_offset(lv, s8715c1f3, ABISELECT(14936,14668), "S8715C1.s8715c1f3");
    test_class_info(&lv, &cd_S8715C1);
    dp->~S8715C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8715C1(Test_S8715C1, "S8715C1", ABISELECT(14944,14672));

#else // __cplusplus

extern void _ZN7S8715C1C1Ev();
extern void _ZN7S8715C1D1Ev();
Name_Map name_map_S8715C1[] = {
  NSPAIR(_ZN7S8715C1C1Ev),
  NSPAIR(_ZN7S8715C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8715C2_nt;
extern VTBL_ENTRY _ZTI10S8715C2_nt[];
extern  VTBL_ENTRY _ZTV10S8715C2_nt[];
static Base_Class bases_S8715C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8715C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8715C1[];
extern void _ZN7S8715C1D1Ev();
extern void _ZN7S8715C1D0Ev();
extern void _ZN10S8715C2_nt2v2Ev();
extern void _ZN7S8715C12v1Ev();
static  VTBL_ENTRY vtc_S8715C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8715C1[0]),
  (VTBL_ENTRY)&_ZN7S8715C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8715C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8715C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN7S8715C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8715C1[];
extern  VTBL_ENTRY _ZTV7S8715C1[];
Class_Descriptor cd_S8715C1 = {  "S8715C1", // class name
  bases_S8715C1, 1,
  &(vtc_S8715C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(14944,14672), // object size
  NSPAIRA(_ZTI7S8715C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8715C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C7_nt  {
  int s273c7f0[2];
  void  mf273c7(); // _ZN9S273C7_nt7mf273c7Ev
};
//SIG(-1 S273C7_nt) C1{ m Fi[2]}


void  S273C7_nt ::mf273c7(){}

//skip512 S273C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C6_nt  {
  int s273c6f0;
  __tsi64 s273c6f1;
  void *s273c6f2[4];
  int s273c6f3[2];
  void *s273c6f4;
  ::S273C7_nt s273c6f5;
  void *s273c6f6[2];
  virtual  ~S273C6_nt(); // _ZN9S273C6_ntD1Ev
  virtual void  v7(); // _ZN9S273C6_nt2v7Ev
  virtual void  v8(); // _ZN9S273C6_nt2v8Ev
  virtual void  v9(); // _ZN9S273C6_nt2v9Ev
  virtual void  v10(); // _ZN9S273C6_nt3v10Ev
  virtual void  v11(); // _ZN9S273C6_nt3v11Ev
  virtual void  v12(); // _ZN9S273C6_nt3v12Ev
  virtual void  v13(); // _ZN9S273C6_nt3v13Ev
  virtual void  v14(); // _ZN9S273C6_nt3v14Ev
  virtual void  v15(); // _ZN9S273C6_nt3v15Ev
  virtual void  v16(); // _ZN9S273C6_nt3v16Ev
  virtual void  v17(); // _ZN9S273C6_nt3v17Ev
  virtual void  v18(); // _ZN9S273C6_nt3v18Ev
  virtual void  v19(); // _ZN9S273C6_nt3v19Ev
  virtual void  v20(); // _ZN9S273C6_nt3v20Ev
  virtual void  v21(); // _ZN9S273C6_nt3v21Ev
  virtual void  v22(); // _ZN9S273C6_nt3v22Ev
  virtual void  v23(); // _ZN9S273C6_nt3v23Ev
  virtual void  v24(); // _ZN9S273C6_nt3v24Ev
  virtual void  v25(); // _ZN9S273C6_nt3v25Ev
  virtual void  v26(); // _ZN9S273C6_nt3v26Ev
  virtual void  v27(); // _ZN9S273C6_nt3v27Ev
  virtual void  v28(); // _ZN9S273C6_nt3v28Ev
  virtual void  v29(); // _ZN9S273C6_nt3v29Ev
  virtual void  v30(); // _ZN9S273C6_nt3v30Ev
  virtual void  v31(); // _ZN9S273C6_nt3v31Ev
  virtual void  v32(); // _ZN9S273C6_nt3v32Ev
  virtual void  v33(); // _ZN9S273C6_nt3v33Ev
  virtual void  v34(); // _ZN9S273C6_nt3v34Ev
  virtual void  v35(); // _ZN9S273C6_nt3v35Ev
  virtual void  v36(); // _ZN9S273C6_nt3v36Ev
  virtual void  v37(); // _ZN9S273C6_nt3v37Ev
  virtual void  v38(); // _ZN9S273C6_nt3v38Ev
  virtual void  v39(); // _ZN9S273C6_nt3v39Ev
  virtual void  v40(); // _ZN9S273C6_nt3v40Ev
  virtual void  v41(); // _ZN9S273C6_nt3v41Ev
  virtual void  v42(); // _ZN9S273C6_nt3v42Ev
  virtual void  v43(); // _ZN9S273C6_nt3v43Ev
  virtual void  v44(); // _ZN9S273C6_nt3v44Ev
  virtual void  v45(); // _ZN9S273C6_nt3v45Ev
  virtual void  v46(); // _ZN9S273C6_nt3v46Ev
  virtual void  v47(); // _ZN9S273C6_nt3v47Ev
  virtual void  v48(); // _ZN9S273C6_nt3v48Ev
  virtual void  v49(); // _ZN9S273C6_nt3v49Ev
  virtual void  v50(); // _ZN9S273C6_nt3v50Ev
  virtual void  v51(); // _ZN9S273C6_nt3v51Ev
  virtual void  v52(); // _ZN9S273C6_nt3v52Ev
  virtual void  v53(); // _ZN9S273C6_nt3v53Ev
  virtual void  v54(); // _ZN9S273C6_nt3v54Ev
  virtual void  v55(); // _ZN9S273C6_nt3v55Ev
  virtual void  v56(); // _ZN9S273C6_nt3v56Ev
  virtual void  v57(); // _ZN9S273C6_nt3v57Ev
  virtual void  v58(); // _ZN9S273C6_nt3v58Ev
  virtual void  v59(); // _ZN9S273C6_nt3v59Ev
  virtual void  v60(); // _ZN9S273C6_nt3v60Ev
  virtual void  v61(); // _ZN9S273C6_nt3v61Ev
  virtual void  v62(); // _ZN9S273C6_nt3v62Ev
  virtual void  v63(); // _ZN9S273C6_nt3v63Ev
  virtual void  v64(); // _ZN9S273C6_nt3v64Ev
  virtual void  v65(); // _ZN9S273C6_nt3v65Ev
  virtual void  v66(); // _ZN9S273C6_nt3v66Ev
  virtual void  v67(); // _ZN9S273C6_nt3v67Ev
  virtual void  v68(); // _ZN9S273C6_nt3v68Ev
  virtual void  v69(); // _ZN9S273C6_nt3v69Ev
  virtual void  v70(); // _ZN9S273C6_nt3v70Ev
  S273C6_nt(); // tgen
};
//SIG(-1 S273C6_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S273C6_nt ::~S273C6_nt(){ note_dtor("S273C6_nt", this);}
void  S273C6_nt ::v7(){vfunc_called(this, "_ZN9S273C6_nt2v7Ev");}
void  S273C6_nt ::v8(){vfunc_called(this, "_ZN9S273C6_nt2v8Ev");}
void  S273C6_nt ::v9(){vfunc_called(this, "_ZN9S273C6_nt2v9Ev");}
void  S273C6_nt ::v10(){vfunc_called(this, "_ZN9S273C6_nt3v10Ev");}
void  S273C6_nt ::v11(){vfunc_called(this, "_ZN9S273C6_nt3v11Ev");}
void  S273C6_nt ::v12(){vfunc_called(this, "_ZN9S273C6_nt3v12Ev");}
void  S273C6_nt ::v13(){vfunc_called(this, "_ZN9S273C6_nt3v13Ev");}
void  S273C6_nt ::v14(){vfunc_called(this, "_ZN9S273C6_nt3v14Ev");}
void  S273C6_nt ::v15(){vfunc_called(this, "_ZN9S273C6_nt3v15Ev");}
void  S273C6_nt ::v16(){vfunc_called(this, "_ZN9S273C6_nt3v16Ev");}
void  S273C6_nt ::v17(){vfunc_called(this, "_ZN9S273C6_nt3v17Ev");}
void  S273C6_nt ::v18(){vfunc_called(this, "_ZN9S273C6_nt3v18Ev");}
void  S273C6_nt ::v19(){vfunc_called(this, "_ZN9S273C6_nt3v19Ev");}
void  S273C6_nt ::v20(){vfunc_called(this, "_ZN9S273C6_nt3v20Ev");}
void  S273C6_nt ::v21(){vfunc_called(this, "_ZN9S273C6_nt3v21Ev");}
void  S273C6_nt ::v22(){vfunc_called(this, "_ZN9S273C6_nt3v22Ev");}
void  S273C6_nt ::v23(){vfunc_called(this, "_ZN9S273C6_nt3v23Ev");}
void  S273C6_nt ::v24(){vfunc_called(this, "_ZN9S273C6_nt3v24Ev");}
void  S273C6_nt ::v25(){vfunc_called(this, "_ZN9S273C6_nt3v25Ev");}
void  S273C6_nt ::v26(){vfunc_called(this, "_ZN9S273C6_nt3v26Ev");}
void  S273C6_nt ::v27(){vfunc_called(this, "_ZN9S273C6_nt3v27Ev");}
void  S273C6_nt ::v28(){vfunc_called(this, "_ZN9S273C6_nt3v28Ev");}
void  S273C6_nt ::v29(){vfunc_called(this, "_ZN9S273C6_nt3v29Ev");}
void  S273C6_nt ::v30(){vfunc_called(this, "_ZN9S273C6_nt3v30Ev");}
void  S273C6_nt ::v31(){vfunc_called(this, "_ZN9S273C6_nt3v31Ev");}
void  S273C6_nt ::v32(){vfunc_called(this, "_ZN9S273C6_nt3v32Ev");}
void  S273C6_nt ::v33(){vfunc_called(this, "_ZN9S273C6_nt3v33Ev");}
void  S273C6_nt ::v34(){vfunc_called(this, "_ZN9S273C6_nt3v34Ev");}
void  S273C6_nt ::v35(){vfunc_called(this, "_ZN9S273C6_nt3v35Ev");}
void  S273C6_nt ::v36(){vfunc_called(this, "_ZN9S273C6_nt3v36Ev");}
void  S273C6_nt ::v37(){vfunc_called(this, "_ZN9S273C6_nt3v37Ev");}
void  S273C6_nt ::v38(){vfunc_called(this, "_ZN9S273C6_nt3v38Ev");}
void  S273C6_nt ::v39(){vfunc_called(this, "_ZN9S273C6_nt3v39Ev");}
void  S273C6_nt ::v40(){vfunc_called(this, "_ZN9S273C6_nt3v40Ev");}
void  S273C6_nt ::v41(){vfunc_called(this, "_ZN9S273C6_nt3v41Ev");}
void  S273C6_nt ::v42(){vfunc_called(this, "_ZN9S273C6_nt3v42Ev");}
void  S273C6_nt ::v43(){vfunc_called(this, "_ZN9S273C6_nt3v43Ev");}
void  S273C6_nt ::v44(){vfunc_called(this, "_ZN9S273C6_nt3v44Ev");}
void  S273C6_nt ::v45(){vfunc_called(this, "_ZN9S273C6_nt3v45Ev");}
void  S273C6_nt ::v46(){vfunc_called(this, "_ZN9S273C6_nt3v46Ev");}
void  S273C6_nt ::v47(){vfunc_called(this, "_ZN9S273C6_nt3v47Ev");}
void  S273C6_nt ::v48(){vfunc_called(this, "_ZN9S273C6_nt3v48Ev");}
void  S273C6_nt ::v49(){vfunc_called(this, "_ZN9S273C6_nt3v49Ev");}
void  S273C6_nt ::v50(){vfunc_called(this, "_ZN9S273C6_nt3v50Ev");}
void  S273C6_nt ::v51(){vfunc_called(this, "_ZN9S273C6_nt3v51Ev");}
void  S273C6_nt ::v52(){vfunc_called(this, "_ZN9S273C6_nt3v52Ev");}
void  S273C6_nt ::v53(){vfunc_called(this, "_ZN9S273C6_nt3v53Ev");}
void  S273C6_nt ::v54(){vfunc_called(this, "_ZN9S273C6_nt3v54Ev");}
void  S273C6_nt ::v55(){vfunc_called(this, "_ZN9S273C6_nt3v55Ev");}
void  S273C6_nt ::v56(){vfunc_called(this, "_ZN9S273C6_nt3v56Ev");}
void  S273C6_nt ::v57(){vfunc_called(this, "_ZN9S273C6_nt3v57Ev");}
void  S273C6_nt ::v58(){vfunc_called(this, "_ZN9S273C6_nt3v58Ev");}
void  S273C6_nt ::v59(){vfunc_called(this, "_ZN9S273C6_nt3v59Ev");}
void  S273C6_nt ::v60(){vfunc_called(this, "_ZN9S273C6_nt3v60Ev");}
void  S273C6_nt ::v61(){vfunc_called(this, "_ZN9S273C6_nt3v61Ev");}
void  S273C6_nt ::v62(){vfunc_called(this, "_ZN9S273C6_nt3v62Ev");}
void  S273C6_nt ::v63(){vfunc_called(this, "_ZN9S273C6_nt3v63Ev");}
void  S273C6_nt ::v64(){vfunc_called(this, "_ZN9S273C6_nt3v64Ev");}
void  S273C6_nt ::v65(){vfunc_called(this, "_ZN9S273C6_nt3v65Ev");}
void  S273C6_nt ::v66(){vfunc_called(this, "_ZN9S273C6_nt3v66Ev");}
void  S273C6_nt ::v67(){vfunc_called(this, "_ZN9S273C6_nt3v67Ev");}
void  S273C6_nt ::v68(){vfunc_called(this, "_ZN9S273C6_nt3v68Ev");}
void  S273C6_nt ::v69(){vfunc_called(this, "_ZN9S273C6_nt3v69Ev");}
void  S273C6_nt ::v70(){vfunc_called(this, "_ZN9S273C6_nt3v70Ev");}
S273C6_nt ::S273C6_nt(){ note_ctor("S273C6_nt", this);} // tgen

//skip512 S273C6_nt

#else // __cplusplus

extern void _ZN9S273C6_ntC1Ev();
extern void _ZN9S273C6_ntD1Ev();
Name_Map name_map_S273C6_nt[] = {
  NSPAIR(_ZN9S273C6_ntC1Ev),
  NSPAIR(_ZN9S273C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S273C6_nt[];
extern void _ZN9S273C6_ntD1Ev();
extern void _ZN9S273C6_ntD0Ev();
extern void _ZN9S273C6_nt2v7Ev();
extern void _ZN9S273C6_nt2v8Ev();
extern void _ZN9S273C6_nt2v9Ev();
extern void _ZN9S273C6_nt3v10Ev();
extern void _ZN9S273C6_nt3v11Ev();
extern void _ZN9S273C6_nt3v12Ev();
extern void _ZN9S273C6_nt3v13Ev();
extern void _ZN9S273C6_nt3v14Ev();
extern void _ZN9S273C6_nt3v15Ev();
extern void _ZN9S273C6_nt3v16Ev();
extern void _ZN9S273C6_nt3v17Ev();
extern void _ZN9S273C6_nt3v18Ev();
extern void _ZN9S273C6_nt3v19Ev();
extern void _ZN9S273C6_nt3v20Ev();
extern void _ZN9S273C6_nt3v21Ev();
extern void _ZN9S273C6_nt3v22Ev();
extern void _ZN9S273C6_nt3v23Ev();
extern void _ZN9S273C6_nt3v24Ev();
extern void _ZN9S273C6_nt3v25Ev();
extern void _ZN9S273C6_nt3v26Ev();
extern void _ZN9S273C6_nt3v27Ev();
extern void _ZN9S273C6_nt3v28Ev();
extern void _ZN9S273C6_nt3v29Ev();
extern void _ZN9S273C6_nt3v30Ev();
extern void _ZN9S273C6_nt3v31Ev();
extern void _ZN9S273C6_nt3v32Ev();
extern void _ZN9S273C6_nt3v33Ev();
extern void _ZN9S273C6_nt3v34Ev();
extern void _ZN9S273C6_nt3v35Ev();
extern void _ZN9S273C6_nt3v36Ev();
extern void _ZN9S273C6_nt3v37Ev();
extern void _ZN9S273C6_nt3v38Ev();
extern void _ZN9S273C6_nt3v39Ev();
extern void _ZN9S273C6_nt3v40Ev();
extern void _ZN9S273C6_nt3v41Ev();
extern void _ZN9S273C6_nt3v42Ev();
extern void _ZN9S273C6_nt3v43Ev();
extern void _ZN9S273C6_nt3v44Ev();
extern void _ZN9S273C6_nt3v45Ev();
extern void _ZN9S273C6_nt3v46Ev();
extern void _ZN9S273C6_nt3v47Ev();
extern void _ZN9S273C6_nt3v48Ev();
extern void _ZN9S273C6_nt3v49Ev();
extern void _ZN9S273C6_nt3v50Ev();
extern void _ZN9S273C6_nt3v51Ev();
extern void _ZN9S273C6_nt3v52Ev();
extern void _ZN9S273C6_nt3v53Ev();
extern void _ZN9S273C6_nt3v54Ev();
extern void _ZN9S273C6_nt3v55Ev();
extern void _ZN9S273C6_nt3v56Ev();
extern void _ZN9S273C6_nt3v57Ev();
extern void _ZN9S273C6_nt3v58Ev();
extern void _ZN9S273C6_nt3v59Ev();
extern void _ZN9S273C6_nt3v60Ev();
extern void _ZN9S273C6_nt3v61Ev();
extern void _ZN9S273C6_nt3v62Ev();
extern void _ZN9S273C6_nt3v63Ev();
extern void _ZN9S273C6_nt3v64Ev();
extern void _ZN9S273C6_nt3v65Ev();
extern void _ZN9S273C6_nt3v66Ev();
extern void _ZN9S273C6_nt3v67Ev();
extern void _ZN9S273C6_nt3v68Ev();
extern void _ZN9S273C6_nt3v69Ev();
extern void _ZN9S273C6_nt3v70Ev();
static  VTBL_ENTRY vtc_S273C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S273C6_nt[0]),
  (VTBL_ENTRY)&_ZN9S273C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S273C6_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v70Ev,
};
extern VTBL_ENTRY _ZTI9S273C6_nt[];
VTBL_ENTRY *P__ZTI9S273C6_nt = _ZTI9S273C6_nt; 
extern  VTBL_ENTRY _ZTV9S273C6_nt[];
Class_Descriptor cd_S273C6_nt = {  "S273C6_nt", // class name
  0,0,//no base classes
  &(vtc_S273C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI9S273C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S273C6_nt),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C11_nt  {
  void *s273c11f0;
  int s273c11f1[2];
  void  mf273c11(); // _ZN10S273C11_nt8mf273c11Ev
};
//SIG(-1 S273C11_nt) C1{ m Fp Fi[2]}


void  S273C11_nt ::mf273c11(){}

//skip512 S273C11_nt

#else // __cplusplus

Class_Descriptor cd_S273C11_nt = {  "S273C11_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C10_nt  : S273C11_nt {
};
//SIG(-1 S273C10_nt) C1{ BC2{ m Fp Fi[2]}}



//skip512 S273C10_nt

#else // __cplusplus

extern Class_Descriptor cd_S273C11_nt;
static Base_Class bases_S273C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S273C10_nt = {  "S273C10_nt", // class name
  bases_S273C10_nt, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C9_nt  : S273C10_nt {
};
//SIG(-1 S273C9_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S273C9_nt

#else // __cplusplus

extern Class_Descriptor cd_S273C11_nt;
extern Class_Descriptor cd_S273C10_nt;
static Base_Class bases_S273C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S273C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S273C9_nt = {  "S273C9_nt", // class name
  bases_S273C9_nt, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C8_nt  : S273C9_nt {
};
//SIG(-1 S273C8_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S273C8_nt

#else // __cplusplus

extern Class_Descriptor cd_S273C11_nt;
extern Class_Descriptor cd_S273C10_nt;
extern Class_Descriptor cd_S273C9_nt;
static Base_Class bases_S273C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S273C10_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S273C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C5_nt  : S273C6_nt {
  int s273c5f0[2];
  void *s273c5f1;
  int s273c5f2[2];
  ::S273C8_nt s273c5f3;
  ::S273C8_nt s273c5f4;
  ::S8663C5_nt s273c5f5;
  ::S273C8_nt s273c5f6;
  unsigned int s273c5f7:1;
  unsigned int s273c5f8:1;
  unsigned int s273c5f9:1;
  unsigned int s273c5f10:1;
  unsigned int s273c5f11:1;
  int s273c5f12[2];
  virtual  ~S273C5_nt(); // _ZN9S273C5_ntD1Ev
  virtual void  v71(); // _ZN9S273C5_nt3v71Ev
  virtual void  v72(); // _ZN9S273C5_nt3v72Ev
  virtual void  v73(); // _ZN9S273C5_nt3v73Ev
  virtual void  v74(); // _ZN9S273C5_nt3v74Ev
  virtual void  v75(); // _ZN9S273C5_nt3v75Ev
  virtual void  v76(); // _ZN9S273C5_nt3v76Ev
  virtual void  v77(); // _ZN9S273C5_nt3v77Ev
  virtual void  v78(); // _ZN9S273C5_nt3v78Ev
  virtual void  v79(); // _ZN9S273C5_nt3v79Ev
  virtual void  v80(); // _ZN9S273C5_nt3v80Ev
  virtual void  v81(); // _ZN9S273C5_nt3v81Ev
  virtual void  v82(); // _ZN9S273C5_nt3v82Ev
  virtual void  v83(); // _ZN9S273C5_nt3v83Ev
  virtual void  v84(); // _ZN9S273C5_nt3v84Ev
  virtual void  v85(); // _ZN9S273C5_nt3v85Ev
  virtual void  v86(); // _ZN9S273C5_nt3v86Ev
  virtual void  v87(); // _ZN9S273C5_nt3v87Ev
  virtual void  v88(); // _ZN9S273C5_nt3v88Ev
  virtual void  v89(); // _ZN9S273C5_nt3v89Ev
  virtual void  v90(); // _ZN9S273C5_nt3v90Ev
  virtual void  v91(); // _ZN9S273C5_nt3v91Ev
  virtual void  v92(); // _ZN9S273C5_nt3v92Ev
  S273C5_nt(); // tgen
};
//SIG(-1 S273C5_nt) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S273C5_nt ::~S273C5_nt(){ note_dtor("S273C5_nt", this);}
void  S273C5_nt ::v71(){vfunc_called(this, "_ZN9S273C5_nt3v71Ev");}
void  S273C5_nt ::v72(){vfunc_called(this, "_ZN9S273C5_nt3v72Ev");}
void  S273C5_nt ::v73(){vfunc_called(this, "_ZN9S273C5_nt3v73Ev");}
void  S273C5_nt ::v74(){vfunc_called(this, "_ZN9S273C5_nt3v74Ev");}
void  S273C5_nt ::v75(){vfunc_called(this, "_ZN9S273C5_nt3v75Ev");}
void  S273C5_nt ::v76(){vfunc_called(this, "_ZN9S273C5_nt3v76Ev");}
void  S273C5_nt ::v77(){vfunc_called(this, "_ZN9S273C5_nt3v77Ev");}
void  S273C5_nt ::v78(){vfunc_called(this, "_ZN9S273C5_nt3v78Ev");}
void  S273C5_nt ::v79(){vfunc_called(this, "_ZN9S273C5_nt3v79Ev");}
void  S273C5_nt ::v80(){vfunc_called(this, "_ZN9S273C5_nt3v80Ev");}
void  S273C5_nt ::v81(){vfunc_called(this, "_ZN9S273C5_nt3v81Ev");}
void  S273C5_nt ::v82(){vfunc_called(this, "_ZN9S273C5_nt3v82Ev");}
void  S273C5_nt ::v83(){vfunc_called(this, "_ZN9S273C5_nt3v83Ev");}
void  S273C5_nt ::v84(){vfunc_called(this, "_ZN9S273C5_nt3v84Ev");}
void  S273C5_nt ::v85(){vfunc_called(this, "_ZN9S273C5_nt3v85Ev");}
void  S273C5_nt ::v86(){vfunc_called(this, "_ZN9S273C5_nt3v86Ev");}
void  S273C5_nt ::v87(){vfunc_called(this, "_ZN9S273C5_nt3v87Ev");}
void  S273C5_nt ::v88(){vfunc_called(this, "_ZN9S273C5_nt3v88Ev");}
void  S273C5_nt ::v89(){vfunc_called(this, "_ZN9S273C5_nt3v89Ev");}
void  S273C5_nt ::v90(){vfunc_called(this, "_ZN9S273C5_nt3v90Ev");}
void  S273C5_nt ::v91(){vfunc_called(this, "_ZN9S273C5_nt3v91Ev");}
void  S273C5_nt ::v92(){vfunc_called(this, "_ZN9S273C5_nt3v92Ev");}
S273C5_nt ::S273C5_nt(){ note_ctor("S273C5_nt", this);} // tgen

//skip512 S273C5_nt

#else // __cplusplus

extern void _ZN9S273C5_ntC1Ev();
extern void _ZN9S273C5_ntD1Ev();
Name_Map name_map_S273C5_nt[] = {
  NSPAIR(_ZN9S273C5_ntC1Ev),
  NSPAIR(_ZN9S273C5_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S273C6_nt;
extern VTBL_ENTRY _ZTI9S273C6_nt[];
extern  VTBL_ENTRY _ZTV9S273C6_nt[];
static Base_Class bases_S273C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S273C5_nt[];
extern void _ZN9S273C5_ntD1Ev();
extern void _ZN9S273C5_ntD0Ev();
extern void _ZN9S273C6_nt2v7Ev();
extern void _ZN9S273C6_nt2v8Ev();
extern void _ZN9S273C6_nt2v9Ev();
extern void _ZN9S273C6_nt3v10Ev();
extern void _ZN9S273C6_nt3v11Ev();
extern void _ZN9S273C6_nt3v12Ev();
extern void _ZN9S273C6_nt3v13Ev();
extern void _ZN9S273C6_nt3v14Ev();
extern void _ZN9S273C6_nt3v15Ev();
extern void _ZN9S273C6_nt3v16Ev();
extern void _ZN9S273C6_nt3v17Ev();
extern void _ZN9S273C6_nt3v18Ev();
extern void _ZN9S273C6_nt3v19Ev();
extern void _ZN9S273C6_nt3v20Ev();
extern void _ZN9S273C6_nt3v21Ev();
extern void _ZN9S273C6_nt3v22Ev();
extern void _ZN9S273C6_nt3v23Ev();
extern void _ZN9S273C6_nt3v24Ev();
extern void _ZN9S273C6_nt3v25Ev();
extern void _ZN9S273C6_nt3v26Ev();
extern void _ZN9S273C6_nt3v27Ev();
extern void _ZN9S273C6_nt3v28Ev();
extern void _ZN9S273C6_nt3v29Ev();
extern void _ZN9S273C6_nt3v30Ev();
extern void _ZN9S273C6_nt3v31Ev();
extern void _ZN9S273C6_nt3v32Ev();
extern void _ZN9S273C6_nt3v33Ev();
extern void _ZN9S273C6_nt3v34Ev();
extern void _ZN9S273C6_nt3v35Ev();
extern void _ZN9S273C6_nt3v36Ev();
extern void _ZN9S273C6_nt3v37Ev();
extern void _ZN9S273C6_nt3v38Ev();
extern void _ZN9S273C6_nt3v39Ev();
extern void _ZN9S273C6_nt3v40Ev();
extern void _ZN9S273C6_nt3v41Ev();
extern void _ZN9S273C6_nt3v42Ev();
extern void _ZN9S273C6_nt3v43Ev();
extern void _ZN9S273C6_nt3v44Ev();
extern void _ZN9S273C6_nt3v45Ev();
extern void _ZN9S273C6_nt3v46Ev();
extern void _ZN9S273C6_nt3v47Ev();
extern void _ZN9S273C6_nt3v48Ev();
extern void _ZN9S273C6_nt3v49Ev();
extern void _ZN9S273C6_nt3v50Ev();
extern void _ZN9S273C6_nt3v51Ev();
extern void _ZN9S273C6_nt3v52Ev();
extern void _ZN9S273C6_nt3v53Ev();
extern void _ZN9S273C6_nt3v54Ev();
extern void _ZN9S273C6_nt3v55Ev();
extern void _ZN9S273C6_nt3v56Ev();
extern void _ZN9S273C6_nt3v57Ev();
extern void _ZN9S273C6_nt3v58Ev();
extern void _ZN9S273C6_nt3v59Ev();
extern void _ZN9S273C6_nt3v60Ev();
extern void _ZN9S273C6_nt3v61Ev();
extern void _ZN9S273C6_nt3v62Ev();
extern void _ZN9S273C6_nt3v63Ev();
extern void _ZN9S273C6_nt3v64Ev();
extern void _ZN9S273C6_nt3v65Ev();
extern void _ZN9S273C6_nt3v66Ev();
extern void _ZN9S273C6_nt3v67Ev();
extern void _ZN9S273C6_nt3v68Ev();
extern void _ZN9S273C6_nt3v69Ev();
extern void _ZN9S273C6_nt3v70Ev();
extern void _ZN9S273C5_nt3v71Ev();
extern void _ZN9S273C5_nt3v72Ev();
extern void _ZN9S273C5_nt3v73Ev();
extern void _ZN9S273C5_nt3v74Ev();
extern void _ZN9S273C5_nt3v75Ev();
extern void _ZN9S273C5_nt3v76Ev();
extern void _ZN9S273C5_nt3v77Ev();
extern void _ZN9S273C5_nt3v78Ev();
extern void _ZN9S273C5_nt3v79Ev();
extern void _ZN9S273C5_nt3v80Ev();
extern void _ZN9S273C5_nt3v81Ev();
extern void _ZN9S273C5_nt3v82Ev();
extern void _ZN9S273C5_nt3v83Ev();
extern void _ZN9S273C5_nt3v84Ev();
extern void _ZN9S273C5_nt3v85Ev();
extern void _ZN9S273C5_nt3v86Ev();
extern void _ZN9S273C5_nt3v87Ev();
extern void _ZN9S273C5_nt3v88Ev();
extern void _ZN9S273C5_nt3v89Ev();
extern void _ZN9S273C5_nt3v90Ev();
extern void _ZN9S273C5_nt3v91Ev();
extern void _ZN9S273C5_nt3v92Ev();
static  VTBL_ENTRY vtc_S273C5_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S273C5_nt[0]),
  (VTBL_ENTRY)&_ZN9S273C5_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S273C5_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v92Ev,
};
extern VTBL_ENTRY _ZTI9S273C5_nt[];
VTBL_ENTRY *P__ZTI9S273C5_nt = _ZTI9S273C5_nt; 
extern  VTBL_ENTRY _ZTV9S273C5_nt[];
Class_Descriptor cd_S273C5_nt = {  "S273C5_nt", // class name
  bases_S273C5_nt, 1,
  &(vtc_S273C5_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI9S273C5_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S273C5_nt),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C14  : S273C11_nt {
};
//SIG(-1 S273C14) C1{ BC2{ m Fp Fi[2]}}



static void Test_S273C14()
{
  extern Class_Descriptor cd_S273C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S273C14, buf);
    S273C14 &lv = *(new (buf) S273C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S273C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S273C14)");
    check_base_class_offset(lv, (S273C11_nt*), 0, "S273C14");
    test_class_info(&lv, &cd_S273C14);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS273C14(Test_S273C14, "S273C14", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S273C11_nt;
static Base_Class bases_S273C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S273C14 = {  "S273C14", // class name
  bases_S273C14, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C13  : S273C14 {
};
//SIG(-1 S273C13) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S273C13()
{
  extern Class_Descriptor cd_S273C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S273C13, buf);
    S273C13 &lv = *(new (buf) S273C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S273C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S273C13)");
    check_base_class_offset(lv, (S273C11_nt*)(S273C14*), 0, "S273C13");
    check_base_class_offset(lv, (S273C14*), 0, "S273C13");
    test_class_info(&lv, &cd_S273C13);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS273C13(Test_S273C13, "S273C13", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S273C11_nt;
extern Class_Descriptor cd_S273C14;
static Base_Class bases_S273C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S273C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S273C13 = {  "S273C13", // class name
  bases_S273C13, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C18  : S273C11_nt {
};
//SIG(-1 S273C18) C1{ BC2{ m Fp Fi[2]}}



static void Test_S273C18()
{
  extern Class_Descriptor cd_S273C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S273C18, buf);
    S273C18 &lv = *(new (buf) S273C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S273C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S273C18)");
    check_base_class_offset(lv, (S273C11_nt*), 0, "S273C18");
    test_class_info(&lv, &cd_S273C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS273C18(Test_S273C18, "S273C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S273C11_nt;
static Base_Class bases_S273C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S273C18 = {  "S273C18", // class name
  bases_S273C18, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C17  : S273C18 {
};
//SIG(-1 S273C17) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S273C17()
{
  extern Class_Descriptor cd_S273C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S273C17, buf);
    S273C17 &lv = *(new (buf) S273C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S273C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S273C17)");
    check_base_class_offset(lv, (S273C11_nt*)(S273C18*), 0, "S273C17");
    check_base_class_offset(lv, (S273C18*), 0, "S273C17");
    test_class_info(&lv, &cd_S273C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS273C17(Test_S273C17, "S273C17", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S273C11_nt;
extern Class_Descriptor cd_S273C18;
static Base_Class bases_S273C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S273C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S273C17 = {  "S273C17", // class name
  bases_S273C17, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C4_nt  : S273C5_nt {
  unsigned int s273c4f0:1;
  unsigned int s273c4f1:1;
  unsigned int s273c4f2:1;
  ::S273C13 s273c4f3;
  ::S273C13 s273c4f4;
  ::S273C17 s273c4f5;
  ::S273C17 s273c4f6;
  int s273c4f7[3];
  virtual  ~S273C4_nt(); // _ZN9S273C4_ntD1Ev
  virtual void  v93(); // _ZN9S273C4_nt3v93Ev
  virtual void  v94(); // _ZN9S273C4_nt3v94Ev
  virtual void  v95(); // _ZN9S273C4_nt3v95Ev
  virtual void  v96(); // _ZN9S273C4_nt3v96Ev
  virtual void  v97(); // _ZN9S273C4_nt3v97Ev
  virtual void  v98(); // _ZN9S273C4_nt3v98Ev
  virtual void  v99(); // _ZN9S273C4_nt3v99Ev
  virtual void  v100(); // _ZN9S273C4_nt4v100Ev
  virtual void  v101(); // _ZN9S273C4_nt4v101Ev
  virtual void  v102(); // _ZN9S273C4_nt4v102Ev
  virtual void  v103(); // _ZN9S273C4_nt4v103Ev
  virtual void  v104(); // _ZN9S273C4_nt4v104Ev
  virtual void  v105(); // _ZN9S273C4_nt4v105Ev
  virtual void  v106(); // _ZN9S273C4_nt4v106Ev
  virtual void  v107(); // _ZN9S273C4_nt4v107Ev
  virtual void  v108(); // _ZN9S273C4_nt4v108Ev
  virtual void  v109(); // _ZN9S273C4_nt4v109Ev
  virtual void  v110(); // _ZN9S273C4_nt4v110Ev
  virtual void  v111(); // _ZN9S273C4_nt4v111Ev
  virtual void  v112(); // _ZN9S273C4_nt4v112Ev
  S273C4_nt(); // tgen
};
//SIG(-1 S273C4_nt) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC10 FC12{ BC13{ BC8}} FC12 Fi[3]}


 S273C4_nt ::~S273C4_nt(){ note_dtor("S273C4_nt", this);}
void  S273C4_nt ::v93(){vfunc_called(this, "_ZN9S273C4_nt3v93Ev");}
void  S273C4_nt ::v94(){vfunc_called(this, "_ZN9S273C4_nt3v94Ev");}
void  S273C4_nt ::v95(){vfunc_called(this, "_ZN9S273C4_nt3v95Ev");}
void  S273C4_nt ::v96(){vfunc_called(this, "_ZN9S273C4_nt3v96Ev");}
void  S273C4_nt ::v97(){vfunc_called(this, "_ZN9S273C4_nt3v97Ev");}
void  S273C4_nt ::v98(){vfunc_called(this, "_ZN9S273C4_nt3v98Ev");}
void  S273C4_nt ::v99(){vfunc_called(this, "_ZN9S273C4_nt3v99Ev");}
void  S273C4_nt ::v100(){vfunc_called(this, "_ZN9S273C4_nt4v100Ev");}
void  S273C4_nt ::v101(){vfunc_called(this, "_ZN9S273C4_nt4v101Ev");}
void  S273C4_nt ::v102(){vfunc_called(this, "_ZN9S273C4_nt4v102Ev");}
void  S273C4_nt ::v103(){vfunc_called(this, "_ZN9S273C4_nt4v103Ev");}
void  S273C4_nt ::v104(){vfunc_called(this, "_ZN9S273C4_nt4v104Ev");}
void  S273C4_nt ::v105(){vfunc_called(this, "_ZN9S273C4_nt4v105Ev");}
void  S273C4_nt ::v106(){vfunc_called(this, "_ZN9S273C4_nt4v106Ev");}
void  S273C4_nt ::v107(){vfunc_called(this, "_ZN9S273C4_nt4v107Ev");}
void  S273C4_nt ::v108(){vfunc_called(this, "_ZN9S273C4_nt4v108Ev");}
void  S273C4_nt ::v109(){vfunc_called(this, "_ZN9S273C4_nt4v109Ev");}
void  S273C4_nt ::v110(){vfunc_called(this, "_ZN9S273C4_nt4v110Ev");}
void  S273C4_nt ::v111(){vfunc_called(this, "_ZN9S273C4_nt4v111Ev");}
void  S273C4_nt ::v112(){vfunc_called(this, "_ZN9S273C4_nt4v112Ev");}
S273C4_nt ::S273C4_nt(){ note_ctor("S273C4_nt", this);} // tgen

//skip512 S273C4_nt

#else // __cplusplus

extern void _ZN9S273C4_ntC1Ev();
extern void _ZN9S273C4_ntD1Ev();
Name_Map name_map_S273C4_nt[] = {
  NSPAIR(_ZN9S273C4_ntC1Ev),
  NSPAIR(_ZN9S273C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S273C6_nt;
extern VTBL_ENTRY _ZTI9S273C6_nt[];
extern  VTBL_ENTRY _ZTV9S273C6_nt[];
extern Class_Descriptor cd_S273C5_nt;
extern VTBL_ENTRY _ZTI9S273C5_nt[];
extern  VTBL_ENTRY _ZTV9S273C5_nt[];
static Base_Class bases_S273C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S273C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S273C4_nt[];
extern void _ZN9S273C4_ntD1Ev();
extern void _ZN9S273C4_ntD0Ev();
extern void _ZN9S273C6_nt2v7Ev();
extern void _ZN9S273C6_nt2v8Ev();
extern void _ZN9S273C6_nt2v9Ev();
extern void _ZN9S273C6_nt3v10Ev();
extern void _ZN9S273C6_nt3v11Ev();
extern void _ZN9S273C6_nt3v12Ev();
extern void _ZN9S273C6_nt3v13Ev();
extern void _ZN9S273C6_nt3v14Ev();
extern void _ZN9S273C6_nt3v15Ev();
extern void _ZN9S273C6_nt3v16Ev();
extern void _ZN9S273C6_nt3v17Ev();
extern void _ZN9S273C6_nt3v18Ev();
extern void _ZN9S273C6_nt3v19Ev();
extern void _ZN9S273C6_nt3v20Ev();
extern void _ZN9S273C6_nt3v21Ev();
extern void _ZN9S273C6_nt3v22Ev();
extern void _ZN9S273C6_nt3v23Ev();
extern void _ZN9S273C6_nt3v24Ev();
extern void _ZN9S273C6_nt3v25Ev();
extern void _ZN9S273C6_nt3v26Ev();
extern void _ZN9S273C6_nt3v27Ev();
extern void _ZN9S273C6_nt3v28Ev();
extern void _ZN9S273C6_nt3v29Ev();
extern void _ZN9S273C6_nt3v30Ev();
extern void _ZN9S273C6_nt3v31Ev();
extern void _ZN9S273C6_nt3v32Ev();
extern void _ZN9S273C6_nt3v33Ev();
extern void _ZN9S273C6_nt3v34Ev();
extern void _ZN9S273C6_nt3v35Ev();
extern void _ZN9S273C6_nt3v36Ev();
extern void _ZN9S273C6_nt3v37Ev();
extern void _ZN9S273C6_nt3v38Ev();
extern void _ZN9S273C6_nt3v39Ev();
extern void _ZN9S273C6_nt3v40Ev();
extern void _ZN9S273C6_nt3v41Ev();
extern void _ZN9S273C6_nt3v42Ev();
extern void _ZN9S273C6_nt3v43Ev();
extern void _ZN9S273C6_nt3v44Ev();
extern void _ZN9S273C6_nt3v45Ev();
extern void _ZN9S273C6_nt3v46Ev();
extern void _ZN9S273C6_nt3v47Ev();
extern void _ZN9S273C6_nt3v48Ev();
extern void _ZN9S273C6_nt3v49Ev();
extern void _ZN9S273C6_nt3v50Ev();
extern void _ZN9S273C6_nt3v51Ev();
extern void _ZN9S273C6_nt3v52Ev();
extern void _ZN9S273C6_nt3v53Ev();
extern void _ZN9S273C6_nt3v54Ev();
extern void _ZN9S273C6_nt3v55Ev();
extern void _ZN9S273C6_nt3v56Ev();
extern void _ZN9S273C6_nt3v57Ev();
extern void _ZN9S273C6_nt3v58Ev();
extern void _ZN9S273C6_nt3v59Ev();
extern void _ZN9S273C6_nt3v60Ev();
extern void _ZN9S273C6_nt3v61Ev();
extern void _ZN9S273C6_nt3v62Ev();
extern void _ZN9S273C6_nt3v63Ev();
extern void _ZN9S273C6_nt3v64Ev();
extern void _ZN9S273C6_nt3v65Ev();
extern void _ZN9S273C6_nt3v66Ev();
extern void _ZN9S273C6_nt3v67Ev();
extern void _ZN9S273C6_nt3v68Ev();
extern void _ZN9S273C6_nt3v69Ev();
extern void _ZN9S273C6_nt3v70Ev();
extern void _ZN9S273C5_nt3v71Ev();
extern void _ZN9S273C5_nt3v72Ev();
extern void _ZN9S273C5_nt3v73Ev();
extern void _ZN9S273C5_nt3v74Ev();
extern void _ZN9S273C5_nt3v75Ev();
extern void _ZN9S273C5_nt3v76Ev();
extern void _ZN9S273C5_nt3v77Ev();
extern void _ZN9S273C5_nt3v78Ev();
extern void _ZN9S273C5_nt3v79Ev();
extern void _ZN9S273C5_nt3v80Ev();
extern void _ZN9S273C5_nt3v81Ev();
extern void _ZN9S273C5_nt3v82Ev();
extern void _ZN9S273C5_nt3v83Ev();
extern void _ZN9S273C5_nt3v84Ev();
extern void _ZN9S273C5_nt3v85Ev();
extern void _ZN9S273C5_nt3v86Ev();
extern void _ZN9S273C5_nt3v87Ev();
extern void _ZN9S273C5_nt3v88Ev();
extern void _ZN9S273C5_nt3v89Ev();
extern void _ZN9S273C5_nt3v90Ev();
extern void _ZN9S273C5_nt3v91Ev();
extern void _ZN9S273C5_nt3v92Ev();
extern void _ZN9S273C4_nt3v93Ev();
extern void _ZN9S273C4_nt3v94Ev();
extern void _ZN9S273C4_nt3v95Ev();
extern void _ZN9S273C4_nt3v96Ev();
extern void _ZN9S273C4_nt3v97Ev();
extern void _ZN9S273C4_nt3v98Ev();
extern void _ZN9S273C4_nt3v99Ev();
extern void _ZN9S273C4_nt4v100Ev();
extern void _ZN9S273C4_nt4v101Ev();
extern void _ZN9S273C4_nt4v102Ev();
extern void _ZN9S273C4_nt4v103Ev();
extern void _ZN9S273C4_nt4v104Ev();
extern void _ZN9S273C4_nt4v105Ev();
extern void _ZN9S273C4_nt4v106Ev();
extern void _ZN9S273C4_nt4v107Ev();
extern void _ZN9S273C4_nt4v108Ev();
extern void _ZN9S273C4_nt4v109Ev();
extern void _ZN9S273C4_nt4v110Ev();
extern void _ZN9S273C4_nt4v111Ev();
extern void _ZN9S273C4_nt4v112Ev();
static  VTBL_ENTRY vtc_S273C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S273C4_nt[0]),
  (VTBL_ENTRY)&_ZN9S273C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S273C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v112Ev,
};
extern VTBL_ENTRY _ZTI9S273C4_nt[];
VTBL_ENTRY *P__ZTI9S273C4_nt = _ZTI9S273C4_nt; 
extern  VTBL_ENTRY _ZTV9S273C4_nt[];
Class_Descriptor cd_S273C4_nt = {  "S273C4_nt", // class name
  bases_S273C4_nt, 2,
  &(vtc_S273C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI9S273C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S273C4_nt),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C22  : S273C11_nt {
};
//SIG(-1 S273C22) C1{ BC2{ m Fp Fi[2]}}



static void Test_S273C22()
{
  extern Class_Descriptor cd_S273C22;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S273C22, buf);
    S273C22 &lv = *(new (buf) S273C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S273C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S273C22)");
    check_base_class_offset(lv, (S273C11_nt*), 0, "S273C22");
    test_class_info(&lv, &cd_S273C22);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS273C22(Test_S273C22, "S273C22", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S273C11_nt;
static Base_Class bases_S273C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S273C22 = {  "S273C22", // class name
  bases_S273C22, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C21  : S273C22 {
};
//SIG(-1 S273C21) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S273C21()
{
  extern Class_Descriptor cd_S273C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S273C21, buf);
    S273C21 &lv = *(new (buf) S273C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S273C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S273C21)");
    check_base_class_offset(lv, (S273C11_nt*)(S273C22*), 0, "S273C21");
    check_base_class_offset(lv, (S273C22*), 0, "S273C21");
    test_class_info(&lv, &cd_S273C21);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS273C21(Test_S273C21, "S273C21", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S273C11_nt;
extern Class_Descriptor cd_S273C22;
static Base_Class bases_S273C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S273C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S273C21 = {  "S273C21", // class name
  bases_S273C21, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C3_nt  : S273C4_nt {
  ::S273C7_nt s273c3f0;
  unsigned int s273c3f1:1;
  ::S273C21 s273c3f2;
  virtual  ~S273C3_nt(); // _ZN9S273C3_ntD1Ev
  virtual void  v113(); // _ZN9S273C3_nt4v113Ev
  virtual void  v114(); // _ZN9S273C3_nt4v114Ev
  virtual void  v115(); // _ZN9S273C3_nt4v115Ev
  virtual void  v116(); // _ZN9S273C3_nt4v116Ev
  S273C3_nt(); // tgen
};
//SIG(-1 S273C3_nt) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC11 FC13{ BC14{ BC9}} FC13 Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC15{ BC16{ BC9}}}


 S273C3_nt ::~S273C3_nt(){ note_dtor("S273C3_nt", this);}
void  S273C3_nt ::v113(){vfunc_called(this, "_ZN9S273C3_nt4v113Ev");}
void  S273C3_nt ::v114(){vfunc_called(this, "_ZN9S273C3_nt4v114Ev");}
void  S273C3_nt ::v115(){vfunc_called(this, "_ZN9S273C3_nt4v115Ev");}
void  S273C3_nt ::v116(){vfunc_called(this, "_ZN9S273C3_nt4v116Ev");}
S273C3_nt ::S273C3_nt(){ note_ctor("S273C3_nt", this);} // tgen

//skip512 S273C3_nt

#else // __cplusplus

extern void _ZN9S273C3_ntC1Ev();
extern void _ZN9S273C3_ntD1Ev();
Name_Map name_map_S273C3_nt[] = {
  NSPAIR(_ZN9S273C3_ntC1Ev),
  NSPAIR(_ZN9S273C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S273C6_nt;
extern VTBL_ENTRY _ZTI9S273C6_nt[];
extern  VTBL_ENTRY _ZTV9S273C6_nt[];
extern Class_Descriptor cd_S273C5_nt;
extern VTBL_ENTRY _ZTI9S273C5_nt[];
extern  VTBL_ENTRY _ZTV9S273C5_nt[];
extern Class_Descriptor cd_S273C4_nt;
extern VTBL_ENTRY _ZTI9S273C4_nt[];
extern  VTBL_ENTRY _ZTV9S273C4_nt[];
static Base_Class bases_S273C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S273C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S273C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S273C3_nt[];
extern void _ZN9S273C3_ntD1Ev();
extern void _ZN9S273C3_ntD0Ev();
extern void _ZN9S273C6_nt2v7Ev();
extern void _ZN9S273C6_nt2v8Ev();
extern void _ZN9S273C6_nt2v9Ev();
extern void _ZN9S273C6_nt3v10Ev();
extern void _ZN9S273C6_nt3v11Ev();
extern void _ZN9S273C6_nt3v12Ev();
extern void _ZN9S273C6_nt3v13Ev();
extern void _ZN9S273C6_nt3v14Ev();
extern void _ZN9S273C6_nt3v15Ev();
extern void _ZN9S273C6_nt3v16Ev();
extern void _ZN9S273C6_nt3v17Ev();
extern void _ZN9S273C6_nt3v18Ev();
extern void _ZN9S273C6_nt3v19Ev();
extern void _ZN9S273C6_nt3v20Ev();
extern void _ZN9S273C6_nt3v21Ev();
extern void _ZN9S273C6_nt3v22Ev();
extern void _ZN9S273C6_nt3v23Ev();
extern void _ZN9S273C6_nt3v24Ev();
extern void _ZN9S273C6_nt3v25Ev();
extern void _ZN9S273C6_nt3v26Ev();
extern void _ZN9S273C6_nt3v27Ev();
extern void _ZN9S273C6_nt3v28Ev();
extern void _ZN9S273C6_nt3v29Ev();
extern void _ZN9S273C6_nt3v30Ev();
extern void _ZN9S273C6_nt3v31Ev();
extern void _ZN9S273C6_nt3v32Ev();
extern void _ZN9S273C6_nt3v33Ev();
extern void _ZN9S273C6_nt3v34Ev();
extern void _ZN9S273C6_nt3v35Ev();
extern void _ZN9S273C6_nt3v36Ev();
extern void _ZN9S273C6_nt3v37Ev();
extern void _ZN9S273C6_nt3v38Ev();
extern void _ZN9S273C6_nt3v39Ev();
extern void _ZN9S273C6_nt3v40Ev();
extern void _ZN9S273C6_nt3v41Ev();
extern void _ZN9S273C6_nt3v42Ev();
extern void _ZN9S273C6_nt3v43Ev();
extern void _ZN9S273C6_nt3v44Ev();
extern void _ZN9S273C6_nt3v45Ev();
extern void _ZN9S273C6_nt3v46Ev();
extern void _ZN9S273C6_nt3v47Ev();
extern void _ZN9S273C6_nt3v48Ev();
extern void _ZN9S273C6_nt3v49Ev();
extern void _ZN9S273C6_nt3v50Ev();
extern void _ZN9S273C6_nt3v51Ev();
extern void _ZN9S273C6_nt3v52Ev();
extern void _ZN9S273C6_nt3v53Ev();
extern void _ZN9S273C6_nt3v54Ev();
extern void _ZN9S273C6_nt3v55Ev();
extern void _ZN9S273C6_nt3v56Ev();
extern void _ZN9S273C6_nt3v57Ev();
extern void _ZN9S273C6_nt3v58Ev();
extern void _ZN9S273C6_nt3v59Ev();
extern void _ZN9S273C6_nt3v60Ev();
extern void _ZN9S273C6_nt3v61Ev();
extern void _ZN9S273C6_nt3v62Ev();
extern void _ZN9S273C6_nt3v63Ev();
extern void _ZN9S273C6_nt3v64Ev();
extern void _ZN9S273C6_nt3v65Ev();
extern void _ZN9S273C6_nt3v66Ev();
extern void _ZN9S273C6_nt3v67Ev();
extern void _ZN9S273C6_nt3v68Ev();
extern void _ZN9S273C6_nt3v69Ev();
extern void _ZN9S273C6_nt3v70Ev();
extern void _ZN9S273C5_nt3v71Ev();
extern void _ZN9S273C5_nt3v72Ev();
extern void _ZN9S273C5_nt3v73Ev();
extern void _ZN9S273C5_nt3v74Ev();
extern void _ZN9S273C5_nt3v75Ev();
extern void _ZN9S273C5_nt3v76Ev();
extern void _ZN9S273C5_nt3v77Ev();
extern void _ZN9S273C5_nt3v78Ev();
extern void _ZN9S273C5_nt3v79Ev();
extern void _ZN9S273C5_nt3v80Ev();
extern void _ZN9S273C5_nt3v81Ev();
extern void _ZN9S273C5_nt3v82Ev();
extern void _ZN9S273C5_nt3v83Ev();
extern void _ZN9S273C5_nt3v84Ev();
extern void _ZN9S273C5_nt3v85Ev();
extern void _ZN9S273C5_nt3v86Ev();
extern void _ZN9S273C5_nt3v87Ev();
extern void _ZN9S273C5_nt3v88Ev();
extern void _ZN9S273C5_nt3v89Ev();
extern void _ZN9S273C5_nt3v90Ev();
extern void _ZN9S273C5_nt3v91Ev();
extern void _ZN9S273C5_nt3v92Ev();
extern void _ZN9S273C4_nt3v93Ev();
extern void _ZN9S273C4_nt3v94Ev();
extern void _ZN9S273C4_nt3v95Ev();
extern void _ZN9S273C4_nt3v96Ev();
extern void _ZN9S273C4_nt3v97Ev();
extern void _ZN9S273C4_nt3v98Ev();
extern void _ZN9S273C4_nt3v99Ev();
extern void _ZN9S273C4_nt4v100Ev();
extern void _ZN9S273C4_nt4v101Ev();
extern void _ZN9S273C4_nt4v102Ev();
extern void _ZN9S273C4_nt4v103Ev();
extern void _ZN9S273C4_nt4v104Ev();
extern void _ZN9S273C4_nt4v105Ev();
extern void _ZN9S273C4_nt4v106Ev();
extern void _ZN9S273C4_nt4v107Ev();
extern void _ZN9S273C4_nt4v108Ev();
extern void _ZN9S273C4_nt4v109Ev();
extern void _ZN9S273C4_nt4v110Ev();
extern void _ZN9S273C4_nt4v111Ev();
extern void _ZN9S273C4_nt4v112Ev();
extern void _ZN9S273C3_nt4v113Ev();
extern void _ZN9S273C3_nt4v114Ev();
extern void _ZN9S273C3_nt4v115Ev();
extern void _ZN9S273C3_nt4v116Ev();
static  VTBL_ENTRY vtc_S273C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S273C3_nt[0]),
  (VTBL_ENTRY)&_ZN9S273C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S273C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S273C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S273C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S273C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S273C3_nt4v116Ev,
};
extern VTBL_ENTRY _ZTI9S273C3_nt[];
VTBL_ENTRY *P__ZTI9S273C3_nt = _ZTI9S273C3_nt; 
extern  VTBL_ENTRY _ZTV9S273C3_nt[];
Class_Descriptor cd_S273C3_nt = {  "S273C3_nt", // class name
  bases_S273C3_nt, 3,
  &(vtc_S273C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI9S273C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S273C3_nt),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C2_nt  : S273C3_nt {
  ::S273C21 s273c2f0;
  unsigned int s273c2f1:1;
  virtual  ~S273C2_nt(); // _ZN9S273C2_ntD1Ev
  virtual void  v117(); // _ZN9S273C2_nt4v117Ev
  virtual void  v118(); // _ZN9S273C2_nt4v118Ev
  virtual void  v119(); // _ZN9S273C2_nt4v119Ev
  virtual void  v120(); // _ZN9S273C2_nt4v120Ev
  virtual void  v121(); // _ZN9S273C2_nt4v121Ev
  virtual void  v122(); // _ZN9S273C2_nt4v122Ev
  virtual void  v123(); // _ZN9S273C2_nt4v123Ev
  S273C2_nt(); // tgen
};
//SIG(-1 S273C2_nt) C1{ BC2{ BC3{ BC4{ BC5{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC12 FC14{ BC15{ BC10}} FC14 Fi[3]} vd v114 v115 v116 v117 FC6 Fi:1 FC16{ BC17{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 FC16 Fi:1}


 S273C2_nt ::~S273C2_nt(){ note_dtor("S273C2_nt", this);}
void  S273C2_nt ::v117(){vfunc_called(this, "_ZN9S273C2_nt4v117Ev");}
void  S273C2_nt ::v118(){vfunc_called(this, "_ZN9S273C2_nt4v118Ev");}
void  S273C2_nt ::v119(){vfunc_called(this, "_ZN9S273C2_nt4v119Ev");}
void  S273C2_nt ::v120(){vfunc_called(this, "_ZN9S273C2_nt4v120Ev");}
void  S273C2_nt ::v121(){vfunc_called(this, "_ZN9S273C2_nt4v121Ev");}
void  S273C2_nt ::v122(){vfunc_called(this, "_ZN9S273C2_nt4v122Ev");}
void  S273C2_nt ::v123(){vfunc_called(this, "_ZN9S273C2_nt4v123Ev");}
S273C2_nt ::S273C2_nt(){ note_ctor("S273C2_nt", this);} // tgen

//skip512 S273C2_nt

#else // __cplusplus

extern void _ZN9S273C2_ntC1Ev();
extern void _ZN9S273C2_ntD1Ev();
Name_Map name_map_S273C2_nt[] = {
  NSPAIR(_ZN9S273C2_ntC1Ev),
  NSPAIR(_ZN9S273C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S273C6_nt;
extern VTBL_ENTRY _ZTI9S273C6_nt[];
extern  VTBL_ENTRY _ZTV9S273C6_nt[];
extern Class_Descriptor cd_S273C5_nt;
extern VTBL_ENTRY _ZTI9S273C5_nt[];
extern  VTBL_ENTRY _ZTV9S273C5_nt[];
extern Class_Descriptor cd_S273C4_nt;
extern VTBL_ENTRY _ZTI9S273C4_nt[];
extern  VTBL_ENTRY _ZTV9S273C4_nt[];
extern Class_Descriptor cd_S273C3_nt;
extern VTBL_ENTRY _ZTI9S273C3_nt[];
extern  VTBL_ENTRY _ZTV9S273C3_nt[];
static Base_Class bases_S273C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S273C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S273C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S273C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S273C2_nt[];
extern void _ZN9S273C2_ntD1Ev();
extern void _ZN9S273C2_ntD0Ev();
extern void _ZN9S273C6_nt2v7Ev();
extern void _ZN9S273C6_nt2v8Ev();
extern void _ZN9S273C6_nt2v9Ev();
extern void _ZN9S273C6_nt3v10Ev();
extern void _ZN9S273C6_nt3v11Ev();
extern void _ZN9S273C6_nt3v12Ev();
extern void _ZN9S273C6_nt3v13Ev();
extern void _ZN9S273C6_nt3v14Ev();
extern void _ZN9S273C6_nt3v15Ev();
extern void _ZN9S273C6_nt3v16Ev();
extern void _ZN9S273C6_nt3v17Ev();
extern void _ZN9S273C6_nt3v18Ev();
extern void _ZN9S273C6_nt3v19Ev();
extern void _ZN9S273C6_nt3v20Ev();
extern void _ZN9S273C6_nt3v21Ev();
extern void _ZN9S273C6_nt3v22Ev();
extern void _ZN9S273C6_nt3v23Ev();
extern void _ZN9S273C6_nt3v24Ev();
extern void _ZN9S273C6_nt3v25Ev();
extern void _ZN9S273C6_nt3v26Ev();
extern void _ZN9S273C6_nt3v27Ev();
extern void _ZN9S273C6_nt3v28Ev();
extern void _ZN9S273C6_nt3v29Ev();
extern void _ZN9S273C6_nt3v30Ev();
extern void _ZN9S273C6_nt3v31Ev();
extern void _ZN9S273C6_nt3v32Ev();
extern void _ZN9S273C6_nt3v33Ev();
extern void _ZN9S273C6_nt3v34Ev();
extern void _ZN9S273C6_nt3v35Ev();
extern void _ZN9S273C6_nt3v36Ev();
extern void _ZN9S273C6_nt3v37Ev();
extern void _ZN9S273C6_nt3v38Ev();
extern void _ZN9S273C6_nt3v39Ev();
extern void _ZN9S273C6_nt3v40Ev();
extern void _ZN9S273C6_nt3v41Ev();
extern void _ZN9S273C6_nt3v42Ev();
extern void _ZN9S273C6_nt3v43Ev();
extern void _ZN9S273C6_nt3v44Ev();
extern void _ZN9S273C6_nt3v45Ev();
extern void _ZN9S273C6_nt3v46Ev();
extern void _ZN9S273C6_nt3v47Ev();
extern void _ZN9S273C6_nt3v48Ev();
extern void _ZN9S273C6_nt3v49Ev();
extern void _ZN9S273C6_nt3v50Ev();
extern void _ZN9S273C6_nt3v51Ev();
extern void _ZN9S273C6_nt3v52Ev();
extern void _ZN9S273C6_nt3v53Ev();
extern void _ZN9S273C6_nt3v54Ev();
extern void _ZN9S273C6_nt3v55Ev();
extern void _ZN9S273C6_nt3v56Ev();
extern void _ZN9S273C6_nt3v57Ev();
extern void _ZN9S273C6_nt3v58Ev();
extern void _ZN9S273C6_nt3v59Ev();
extern void _ZN9S273C6_nt3v60Ev();
extern void _ZN9S273C6_nt3v61Ev();
extern void _ZN9S273C6_nt3v62Ev();
extern void _ZN9S273C6_nt3v63Ev();
extern void _ZN9S273C6_nt3v64Ev();
extern void _ZN9S273C6_nt3v65Ev();
extern void _ZN9S273C6_nt3v66Ev();
extern void _ZN9S273C6_nt3v67Ev();
extern void _ZN9S273C6_nt3v68Ev();
extern void _ZN9S273C6_nt3v69Ev();
extern void _ZN9S273C6_nt3v70Ev();
extern void _ZN9S273C5_nt3v71Ev();
extern void _ZN9S273C5_nt3v72Ev();
extern void _ZN9S273C5_nt3v73Ev();
extern void _ZN9S273C5_nt3v74Ev();
extern void _ZN9S273C5_nt3v75Ev();
extern void _ZN9S273C5_nt3v76Ev();
extern void _ZN9S273C5_nt3v77Ev();
extern void _ZN9S273C5_nt3v78Ev();
extern void _ZN9S273C5_nt3v79Ev();
extern void _ZN9S273C5_nt3v80Ev();
extern void _ZN9S273C5_nt3v81Ev();
extern void _ZN9S273C5_nt3v82Ev();
extern void _ZN9S273C5_nt3v83Ev();
extern void _ZN9S273C5_nt3v84Ev();
extern void _ZN9S273C5_nt3v85Ev();
extern void _ZN9S273C5_nt3v86Ev();
extern void _ZN9S273C5_nt3v87Ev();
extern void _ZN9S273C5_nt3v88Ev();
extern void _ZN9S273C5_nt3v89Ev();
extern void _ZN9S273C5_nt3v90Ev();
extern void _ZN9S273C5_nt3v91Ev();
extern void _ZN9S273C5_nt3v92Ev();
extern void _ZN9S273C4_nt3v93Ev();
extern void _ZN9S273C4_nt3v94Ev();
extern void _ZN9S273C4_nt3v95Ev();
extern void _ZN9S273C4_nt3v96Ev();
extern void _ZN9S273C4_nt3v97Ev();
extern void _ZN9S273C4_nt3v98Ev();
extern void _ZN9S273C4_nt3v99Ev();
extern void _ZN9S273C4_nt4v100Ev();
extern void _ZN9S273C4_nt4v101Ev();
extern void _ZN9S273C4_nt4v102Ev();
extern void _ZN9S273C4_nt4v103Ev();
extern void _ZN9S273C4_nt4v104Ev();
extern void _ZN9S273C4_nt4v105Ev();
extern void _ZN9S273C4_nt4v106Ev();
extern void _ZN9S273C4_nt4v107Ev();
extern void _ZN9S273C4_nt4v108Ev();
extern void _ZN9S273C4_nt4v109Ev();
extern void _ZN9S273C4_nt4v110Ev();
extern void _ZN9S273C4_nt4v111Ev();
extern void _ZN9S273C4_nt4v112Ev();
extern void _ZN9S273C3_nt4v113Ev();
extern void _ZN9S273C3_nt4v114Ev();
extern void _ZN9S273C3_nt4v115Ev();
extern void _ZN9S273C3_nt4v116Ev();
extern void _ZN9S273C2_nt4v117Ev();
extern void _ZN9S273C2_nt4v118Ev();
extern void _ZN9S273C2_nt4v119Ev();
extern void _ZN9S273C2_nt4v120Ev();
extern void _ZN9S273C2_nt4v121Ev();
extern void _ZN9S273C2_nt4v122Ev();
extern void _ZN9S273C2_nt4v123Ev();
static  VTBL_ENTRY vtc_S273C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S273C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S273C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S273C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S273C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S273C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S273C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S273C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S273C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S273C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S273C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S273C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S273C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S273C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S273C2_nt4v123Ev,
};
extern VTBL_ENTRY _ZTI9S273C2_nt[];
VTBL_ENTRY *P__ZTI9S273C2_nt = _ZTI9S273C2_nt; 
extern  VTBL_ENTRY _ZTV9S273C2_nt[];
Class_Descriptor cd_S273C2_nt = {  "S273C2_nt", // class name
  bases_S273C2_nt, 4,
  &(vtc_S273C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI9S273C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S273C2_nt),121, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S273C1  : S273C2_nt {
  unsigned int s273c1f0:1;
  int s273c1f1[4];
  virtual  ~S273C1(); // _ZN6S273C1D1Ev
  virtual void  v1(); // _ZN6S273C12v1Ev
  virtual void  v2(); // _ZN6S273C12v2Ev
  virtual void  v3(); // _ZN6S273C12v3Ev
  virtual void  v4(); // _ZN6S273C12v4Ev
  virtual void  v5(); // _ZN6S273C12v5Ev
  virtual void  v6(); // _ZN6S273C12v6Ev
  S273C1(); // tgen
};
//SIG(1 S273C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC13 FC15{ BC16{ BC11}} FC15 Fi[3]} vd v113 v114 v115 v116 FC7 Fi:1 FC17{ BC18{ BC11}}} vd v117 v118 v119 v120 v121 v122 v123 FC17 Fi:1} vd v1 v2 v3 v4 v5 v6 Fi:1 Fi[4]}


 S273C1 ::~S273C1(){ note_dtor("S273C1", this);}
void  S273C1 ::v1(){vfunc_called(this, "_ZN6S273C12v1Ev");}
void  S273C1 ::v2(){vfunc_called(this, "_ZN6S273C12v2Ev");}
void  S273C1 ::v3(){vfunc_called(this, "_ZN6S273C12v3Ev");}
void  S273C1 ::v4(){vfunc_called(this, "_ZN6S273C12v4Ev");}
void  S273C1 ::v5(){vfunc_called(this, "_ZN6S273C12v5Ev");}
void  S273C1 ::v6(){vfunc_called(this, "_ZN6S273C12v6Ev");}
S273C1 ::S273C1(){ note_ctor("S273C1", this);} // tgen

static void Test_S273C1()
{
  extern Class_Descriptor cd_S273C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,64)];
    init_test(&cd_S273C1, buf);
    S273C1 *dp, &lv = *(dp=new (buf) S273C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,252), "sizeof(S273C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S273C1)");
    check_base_class_offset(lv, (S273C6_nt*)(S273C5_nt*)(S273C4_nt*)(S273C3_nt*)(S273C2_nt*), 0, "S273C1");
    check_base_class_offset(lv, (S273C5_nt*)(S273C4_nt*)(S273C3_nt*)(S273C2_nt*), 0, "S273C1");
    check_base_class_offset(lv, (S273C4_nt*)(S273C3_nt*)(S273C2_nt*), 0, "S273C1");
    check_base_class_offset(lv, (S273C3_nt*)(S273C2_nt*), 0, "S273C1");
    check_base_class_offset(lv, (S273C2_nt*), 0, "S273C1");
    set_bf_and_test(lv, s273c1f0, ABISELECT(313,233), 0, 1, 1, "S273C1");
    check_field_offset(lv, s273c1f1, ABISELECT(316,236), "S273C1.s273c1f1");
    test_class_info(&lv, &cd_S273C1);
    dp->~S273C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS273C1(Test_S273C1, "S273C1", ABISELECT(336,252));

#else // __cplusplus

extern void _ZN6S273C1C1Ev();
extern void _ZN6S273C1D1Ev();
Name_Map name_map_S273C1[] = {
  NSPAIR(_ZN6S273C1C1Ev),
  NSPAIR(_ZN6S273C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S273C6_nt;
extern VTBL_ENTRY _ZTI9S273C6_nt[];
extern  VTBL_ENTRY _ZTV9S273C6_nt[];
extern Class_Descriptor cd_S273C5_nt;
extern VTBL_ENTRY _ZTI9S273C5_nt[];
extern  VTBL_ENTRY _ZTV9S273C5_nt[];
extern Class_Descriptor cd_S273C4_nt;
extern VTBL_ENTRY _ZTI9S273C4_nt[];
extern  VTBL_ENTRY _ZTV9S273C4_nt[];
extern Class_Descriptor cd_S273C3_nt;
extern VTBL_ENTRY _ZTI9S273C3_nt[];
extern  VTBL_ENTRY _ZTV9S273C3_nt[];
extern Class_Descriptor cd_S273C2_nt;
extern VTBL_ENTRY _ZTI9S273C2_nt[];
extern  VTBL_ENTRY _ZTV9S273C2_nt[];
static Base_Class bases_S273C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C6_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S273C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S273C4_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S273C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S273C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S273C1[];
extern void _ZN6S273C1D1Ev();
extern void _ZN6S273C1D0Ev();
extern void _ZN9S273C6_nt2v7Ev();
extern void _ZN9S273C6_nt2v8Ev();
extern void _ZN9S273C6_nt2v9Ev();
extern void _ZN9S273C6_nt3v10Ev();
extern void _ZN9S273C6_nt3v11Ev();
extern void _ZN9S273C6_nt3v12Ev();
extern void _ZN9S273C6_nt3v13Ev();
extern void _ZN9S273C6_nt3v14Ev();
extern void _ZN9S273C6_nt3v15Ev();
extern void _ZN9S273C6_nt3v16Ev();
extern void _ZN9S273C6_nt3v17Ev();
extern void _ZN9S273C6_nt3v18Ev();
extern void _ZN9S273C6_nt3v19Ev();
extern void _ZN9S273C6_nt3v20Ev();
extern void _ZN9S273C6_nt3v21Ev();
extern void _ZN9S273C6_nt3v22Ev();
extern void _ZN9S273C6_nt3v23Ev();
extern void _ZN9S273C6_nt3v24Ev();
extern void _ZN9S273C6_nt3v25Ev();
extern void _ZN9S273C6_nt3v26Ev();
extern void _ZN9S273C6_nt3v27Ev();
extern void _ZN9S273C6_nt3v28Ev();
extern void _ZN9S273C6_nt3v29Ev();
extern void _ZN9S273C6_nt3v30Ev();
extern void _ZN9S273C6_nt3v31Ev();
extern void _ZN9S273C6_nt3v32Ev();
extern void _ZN9S273C6_nt3v33Ev();
extern void _ZN9S273C6_nt3v34Ev();
extern void _ZN9S273C6_nt3v35Ev();
extern void _ZN9S273C6_nt3v36Ev();
extern void _ZN9S273C6_nt3v37Ev();
extern void _ZN9S273C6_nt3v38Ev();
extern void _ZN9S273C6_nt3v39Ev();
extern void _ZN9S273C6_nt3v40Ev();
extern void _ZN9S273C6_nt3v41Ev();
extern void _ZN9S273C6_nt3v42Ev();
extern void _ZN9S273C6_nt3v43Ev();
extern void _ZN9S273C6_nt3v44Ev();
extern void _ZN9S273C6_nt3v45Ev();
extern void _ZN9S273C6_nt3v46Ev();
extern void _ZN9S273C6_nt3v47Ev();
extern void _ZN9S273C6_nt3v48Ev();
extern void _ZN9S273C6_nt3v49Ev();
extern void _ZN9S273C6_nt3v50Ev();
extern void _ZN9S273C6_nt3v51Ev();
extern void _ZN9S273C6_nt3v52Ev();
extern void _ZN9S273C6_nt3v53Ev();
extern void _ZN9S273C6_nt3v54Ev();
extern void _ZN9S273C6_nt3v55Ev();
extern void _ZN9S273C6_nt3v56Ev();
extern void _ZN9S273C6_nt3v57Ev();
extern void _ZN9S273C6_nt3v58Ev();
extern void _ZN9S273C6_nt3v59Ev();
extern void _ZN9S273C6_nt3v60Ev();
extern void _ZN9S273C6_nt3v61Ev();
extern void _ZN9S273C6_nt3v62Ev();
extern void _ZN9S273C6_nt3v63Ev();
extern void _ZN9S273C6_nt3v64Ev();
extern void _ZN9S273C6_nt3v65Ev();
extern void _ZN9S273C6_nt3v66Ev();
extern void _ZN9S273C6_nt3v67Ev();
extern void _ZN9S273C6_nt3v68Ev();
extern void _ZN9S273C6_nt3v69Ev();
extern void _ZN9S273C6_nt3v70Ev();
extern void _ZN9S273C5_nt3v71Ev();
extern void _ZN9S273C5_nt3v72Ev();
extern void _ZN9S273C5_nt3v73Ev();
extern void _ZN9S273C5_nt3v74Ev();
extern void _ZN9S273C5_nt3v75Ev();
extern void _ZN9S273C5_nt3v76Ev();
extern void _ZN9S273C5_nt3v77Ev();
extern void _ZN9S273C5_nt3v78Ev();
extern void _ZN9S273C5_nt3v79Ev();
extern void _ZN9S273C5_nt3v80Ev();
extern void _ZN9S273C5_nt3v81Ev();
extern void _ZN9S273C5_nt3v82Ev();
extern void _ZN9S273C5_nt3v83Ev();
extern void _ZN9S273C5_nt3v84Ev();
extern void _ZN9S273C5_nt3v85Ev();
extern void _ZN9S273C5_nt3v86Ev();
extern void _ZN9S273C5_nt3v87Ev();
extern void _ZN9S273C5_nt3v88Ev();
extern void _ZN9S273C5_nt3v89Ev();
extern void _ZN9S273C5_nt3v90Ev();
extern void _ZN9S273C5_nt3v91Ev();
extern void _ZN9S273C5_nt3v92Ev();
extern void _ZN9S273C4_nt3v93Ev();
extern void _ZN9S273C4_nt3v94Ev();
extern void _ZN9S273C4_nt3v95Ev();
extern void _ZN9S273C4_nt3v96Ev();
extern void _ZN9S273C4_nt3v97Ev();
extern void _ZN9S273C4_nt3v98Ev();
extern void _ZN9S273C4_nt3v99Ev();
extern void _ZN9S273C4_nt4v100Ev();
extern void _ZN9S273C4_nt4v101Ev();
extern void _ZN9S273C4_nt4v102Ev();
extern void _ZN9S273C4_nt4v103Ev();
extern void _ZN9S273C4_nt4v104Ev();
extern void _ZN9S273C4_nt4v105Ev();
extern void _ZN9S273C4_nt4v106Ev();
extern void _ZN9S273C4_nt4v107Ev();
extern void _ZN9S273C4_nt4v108Ev();
extern void _ZN9S273C4_nt4v109Ev();
extern void _ZN9S273C4_nt4v110Ev();
extern void _ZN9S273C4_nt4v111Ev();
extern void _ZN9S273C4_nt4v112Ev();
extern void _ZN9S273C3_nt4v113Ev();
extern void _ZN9S273C3_nt4v114Ev();
extern void _ZN9S273C3_nt4v115Ev();
extern void _ZN9S273C3_nt4v116Ev();
extern void _ZN9S273C2_nt4v117Ev();
extern void _ZN9S273C2_nt4v118Ev();
extern void _ZN9S273C2_nt4v119Ev();
extern void _ZN9S273C2_nt4v120Ev();
extern void _ZN9S273C2_nt4v121Ev();
extern void _ZN9S273C2_nt4v122Ev();
extern void _ZN9S273C2_nt4v123Ev();
extern void _ZN6S273C12v1Ev();
extern void _ZN6S273C12v2Ev();
extern void _ZN6S273C12v3Ev();
extern void _ZN6S273C12v4Ev();
extern void _ZN6S273C12v5Ev();
extern void _ZN6S273C12v6Ev();
static  VTBL_ENTRY vtc_S273C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S273C1[0]),
  (VTBL_ENTRY)&_ZN6S273C1D1Ev,
  (VTBL_ENTRY)&_ZN6S273C1D0Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v8Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt2v9Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v10Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v11Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v12Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v13Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v14Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v15Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v16Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v17Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v18Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v19Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v20Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v21Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v22Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v23Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v24Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v25Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v26Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v27Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v28Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v29Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v30Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v31Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v32Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v33Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v34Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v35Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v36Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v37Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v38Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v39Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v40Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v41Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v42Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v43Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v44Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v45Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v46Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v47Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v48Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v49Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v50Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v51Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v52Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v53Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v54Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v55Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v56Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v57Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v58Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v59Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v60Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v61Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v62Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v63Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v64Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v65Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v66Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v67Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v68Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v69Ev,
  (VTBL_ENTRY)&_ZN9S273C6_nt3v70Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v71Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v72Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v73Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v74Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v75Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v76Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v77Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v78Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v79Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v80Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v81Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v82Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v83Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v84Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v85Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v86Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v87Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v88Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v89Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v90Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v91Ev,
  (VTBL_ENTRY)&_ZN9S273C5_nt3v92Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v93Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v94Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v95Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v96Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v97Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v98Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt3v99Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v100Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v101Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v102Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v103Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v104Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v105Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v106Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v107Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v108Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v109Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v110Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v111Ev,
  (VTBL_ENTRY)&_ZN9S273C4_nt4v112Ev,
  (VTBL_ENTRY)&_ZN9S273C3_nt4v113Ev,
  (VTBL_ENTRY)&_ZN9S273C3_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S273C3_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S273C3_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S273C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S273C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S273C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S273C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S273C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN9S273C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN9S273C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN6S273C12v1Ev,
  (VTBL_ENTRY)&_ZN6S273C12v2Ev,
  (VTBL_ENTRY)&_ZN6S273C12v3Ev,
  (VTBL_ENTRY)&_ZN6S273C12v4Ev,
  (VTBL_ENTRY)&_ZN6S273C12v5Ev,
  (VTBL_ENTRY)&_ZN6S273C12v6Ev,
};
extern VTBL_ENTRY _ZTI6S273C1[];
extern  VTBL_ENTRY _ZTV6S273C1[];
Class_Descriptor cd_S273C1 = {  "S273C1", // class name
  bases_S273C1, 5,
  &(vtc_S273C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,252), // object size
  NSPAIRA(_ZTI6S273C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S273C1),127, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S207C6  {
  int s207c6f0;
  __tsi64 s207c6f1;
  void *s207c6f2[4];
  int s207c6f3[2];
  void *s207c6f4;
  ::S273C7_nt s207c6f5;
  void *s207c6f6[2];
  virtual  ~S207C6(); // _ZN6S207C6D1Ev
  virtual void  v4(); // _ZN6S207C62v4Ev
  virtual void  v5(); // _ZN6S207C62v5Ev
  virtual void  v6(); // _ZN6S207C62v6Ev
  virtual void  v7(); // _ZN6S207C62v7Ev
  virtual void  v8(); // _ZN6S207C62v8Ev
  virtual void  v9(); // _ZN6S207C62v9Ev
  virtual void  v10(); // _ZN6S207C63v10Ev
  virtual void  v11(); // _ZN6S207C63v11Ev
  virtual void  v12(); // _ZN6S207C63v12Ev
  virtual void  v13(); // _ZN6S207C63v13Ev
  virtual void  v14(); // _ZN6S207C63v14Ev
  virtual void  v15(); // _ZN6S207C63v15Ev
  virtual void  v16(); // _ZN6S207C63v16Ev
  virtual void  v17(); // _ZN6S207C63v17Ev
  virtual void  v18(); // _ZN6S207C63v18Ev
  virtual void  v19(); // _ZN6S207C63v19Ev
  virtual void  v20(); // _ZN6S207C63v20Ev
  virtual void  v21(); // _ZN6S207C63v21Ev
  virtual void  v22(); // _ZN6S207C63v22Ev
  virtual void  v23(); // _ZN6S207C63v23Ev
  virtual void  v24(); // _ZN6S207C63v24Ev
  virtual void  v25(); // _ZN6S207C63v25Ev
  virtual void  v26(); // _ZN6S207C63v26Ev
  virtual void  v27(); // _ZN6S207C63v27Ev
  virtual void  v28(); // _ZN6S207C63v28Ev
  virtual void  v29(); // _ZN6S207C63v29Ev
  virtual void  v30(); // _ZN6S207C63v30Ev
  virtual void  v31(); // _ZN6S207C63v31Ev
  virtual void  v32(); // _ZN6S207C63v32Ev
  virtual void  v33(); // _ZN6S207C63v33Ev
  virtual void  v34(); // _ZN6S207C63v34Ev
  virtual void  v35(); // _ZN6S207C63v35Ev
  virtual void  v36(); // _ZN6S207C63v36Ev
  virtual void  v37(); // _ZN6S207C63v37Ev
  virtual void  v38(); // _ZN6S207C63v38Ev
  virtual void  v39(); // _ZN6S207C63v39Ev
  virtual void  v40(); // _ZN6S207C63v40Ev
  virtual void  v41(); // _ZN6S207C63v41Ev
  virtual void  v42(); // _ZN6S207C63v42Ev
  virtual void  v43(); // _ZN6S207C63v43Ev
  virtual void  v44(); // _ZN6S207C63v44Ev
  virtual void  v45(); // _ZN6S207C63v45Ev
  virtual void  v46(); // _ZN6S207C63v46Ev
  virtual void  v47(); // _ZN6S207C63v47Ev
  virtual void  v48(); // _ZN6S207C63v48Ev
  virtual void  v49(); // _ZN6S207C63v49Ev
  virtual void  v50(); // _ZN6S207C63v50Ev
  virtual void  v51(); // _ZN6S207C63v51Ev
  virtual void  v52(); // _ZN6S207C63v52Ev
  virtual void  v53(); // _ZN6S207C63v53Ev
  virtual void  v54(); // _ZN6S207C63v54Ev
  virtual void  v55(); // _ZN6S207C63v55Ev
  virtual void  v56(); // _ZN6S207C63v56Ev
  virtual void  v57(); // _ZN6S207C63v57Ev
  virtual void  v58(); // _ZN6S207C63v58Ev
  virtual void  v59(); // _ZN6S207C63v59Ev
  virtual void  v60(); // _ZN6S207C63v60Ev
  virtual void  v61(); // _ZN6S207C63v61Ev
  virtual void  v62(); // _ZN6S207C63v62Ev
  virtual void  v63(); // _ZN6S207C63v63Ev
  virtual void  v64(); // _ZN6S207C63v64Ev
  virtual void  v65(); // _ZN6S207C63v65Ev
  virtual void  v66(); // _ZN6S207C63v66Ev
  virtual void  v67(); // _ZN6S207C63v67Ev
  S207C6(); // tgen
};
//SIG(-1 S207C6) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S207C6 ::~S207C6(){ note_dtor("S207C6", this);}
void  S207C6 ::v4(){vfunc_called(this, "_ZN6S207C62v4Ev");}
void  S207C6 ::v5(){vfunc_called(this, "_ZN6S207C62v5Ev");}
void  S207C6 ::v6(){vfunc_called(this, "_ZN6S207C62v6Ev");}
void  S207C6 ::v7(){vfunc_called(this, "_ZN6S207C62v7Ev");}
void  S207C6 ::v8(){vfunc_called(this, "_ZN6S207C62v8Ev");}
void  S207C6 ::v9(){vfunc_called(this, "_ZN6S207C62v9Ev");}
void  S207C6 ::v10(){vfunc_called(this, "_ZN6S207C63v10Ev");}
void  S207C6 ::v11(){vfunc_called(this, "_ZN6S207C63v11Ev");}
void  S207C6 ::v12(){vfunc_called(this, "_ZN6S207C63v12Ev");}
void  S207C6 ::v13(){vfunc_called(this, "_ZN6S207C63v13Ev");}
void  S207C6 ::v14(){vfunc_called(this, "_ZN6S207C63v14Ev");}
void  S207C6 ::v15(){vfunc_called(this, "_ZN6S207C63v15Ev");}
void  S207C6 ::v16(){vfunc_called(this, "_ZN6S207C63v16Ev");}
void  S207C6 ::v17(){vfunc_called(this, "_ZN6S207C63v17Ev");}
void  S207C6 ::v18(){vfunc_called(this, "_ZN6S207C63v18Ev");}
void  S207C6 ::v19(){vfunc_called(this, "_ZN6S207C63v19Ev");}
void  S207C6 ::v20(){vfunc_called(this, "_ZN6S207C63v20Ev");}
void  S207C6 ::v21(){vfunc_called(this, "_ZN6S207C63v21Ev");}
void  S207C6 ::v22(){vfunc_called(this, "_ZN6S207C63v22Ev");}
void  S207C6 ::v23(){vfunc_called(this, "_ZN6S207C63v23Ev");}
void  S207C6 ::v24(){vfunc_called(this, "_ZN6S207C63v24Ev");}
void  S207C6 ::v25(){vfunc_called(this, "_ZN6S207C63v25Ev");}
void  S207C6 ::v26(){vfunc_called(this, "_ZN6S207C63v26Ev");}
void  S207C6 ::v27(){vfunc_called(this, "_ZN6S207C63v27Ev");}
void  S207C6 ::v28(){vfunc_called(this, "_ZN6S207C63v28Ev");}
void  S207C6 ::v29(){vfunc_called(this, "_ZN6S207C63v29Ev");}
void  S207C6 ::v30(){vfunc_called(this, "_ZN6S207C63v30Ev");}
void  S207C6 ::v31(){vfunc_called(this, "_ZN6S207C63v31Ev");}
void  S207C6 ::v32(){vfunc_called(this, "_ZN6S207C63v32Ev");}
void  S207C6 ::v33(){vfunc_called(this, "_ZN6S207C63v33Ev");}
void  S207C6 ::v34(){vfunc_called(this, "_ZN6S207C63v34Ev");}
void  S207C6 ::v35(){vfunc_called(this, "_ZN6S207C63v35Ev");}
void  S207C6 ::v36(){vfunc_called(this, "_ZN6S207C63v36Ev");}
void  S207C6 ::v37(){vfunc_called(this, "_ZN6S207C63v37Ev");}
void  S207C6 ::v38(){vfunc_called(this, "_ZN6S207C63v38Ev");}
void  S207C6 ::v39(){vfunc_called(this, "_ZN6S207C63v39Ev");}
void  S207C6 ::v40(){vfunc_called(this, "_ZN6S207C63v40Ev");}
void  S207C6 ::v41(){vfunc_called(this, "_ZN6S207C63v41Ev");}
void  S207C6 ::v42(){vfunc_called(this, "_ZN6S207C63v42Ev");}
void  S207C6 ::v43(){vfunc_called(this, "_ZN6S207C63v43Ev");}
void  S207C6 ::v44(){vfunc_called(this, "_ZN6S207C63v44Ev");}
void  S207C6 ::v45(){vfunc_called(this, "_ZN6S207C63v45Ev");}
void  S207C6 ::v46(){vfunc_called(this, "_ZN6S207C63v46Ev");}
void  S207C6 ::v47(){vfunc_called(this, "_ZN6S207C63v47Ev");}
void  S207C6 ::v48(){vfunc_called(this, "_ZN6S207C63v48Ev");}
void  S207C6 ::v49(){vfunc_called(this, "_ZN6S207C63v49Ev");}
void  S207C6 ::v50(){vfunc_called(this, "_ZN6S207C63v50Ev");}
void  S207C6 ::v51(){vfunc_called(this, "_ZN6S207C63v51Ev");}
void  S207C6 ::v52(){vfunc_called(this, "_ZN6S207C63v52Ev");}
void  S207C6 ::v53(){vfunc_called(this, "_ZN6S207C63v53Ev");}
void  S207C6 ::v54(){vfunc_called(this, "_ZN6S207C63v54Ev");}
void  S207C6 ::v55(){vfunc_called(this, "_ZN6S207C63v55Ev");}
void  S207C6 ::v56(){vfunc_called(this, "_ZN6S207C63v56Ev");}
void  S207C6 ::v57(){vfunc_called(this, "_ZN6S207C63v57Ev");}
void  S207C6 ::v58(){vfunc_called(this, "_ZN6S207C63v58Ev");}
void  S207C6 ::v59(){vfunc_called(this, "_ZN6S207C63v59Ev");}
void  S207C6 ::v60(){vfunc_called(this, "_ZN6S207C63v60Ev");}
void  S207C6 ::v61(){vfunc_called(this, "_ZN6S207C63v61Ev");}
void  S207C6 ::v62(){vfunc_called(this, "_ZN6S207C63v62Ev");}
void  S207C6 ::v63(){vfunc_called(this, "_ZN6S207C63v63Ev");}
void  S207C6 ::v64(){vfunc_called(this, "_ZN6S207C63v64Ev");}
void  S207C6 ::v65(){vfunc_called(this, "_ZN6S207C63v65Ev");}
void  S207C6 ::v66(){vfunc_called(this, "_ZN6S207C63v66Ev");}
void  S207C6 ::v67(){vfunc_called(this, "_ZN6S207C63v67Ev");}
S207C6 ::S207C6(){ note_ctor("S207C6", this);} // tgen

static void Test_S207C6()
{
  extern Class_Descriptor cd_S207C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S207C6, buf);
    S207C6 *dp, &lv = *(dp=new (buf) S207C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S207C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S207C6)");
    check_field_offset(lv, s207c6f0, ABISELECT(8,4), "S207C6.s207c6f0");
    check_field_offset(lv, s207c6f1, ABISELECT(16,8), "S207C6.s207c6f1");
    check_field_offset(lv, s207c6f2, ABISELECT(24,16), "S207C6.s207c6f2");
    check_field_offset(lv, s207c6f3, ABISELECT(56,32), "S207C6.s207c6f3");
    check_field_offset(lv, s207c6f4, ABISELECT(64,40), "S207C6.s207c6f4");
    check_field_offset(lv, s207c6f5, ABISELECT(72,44), "S207C6.s207c6f5");
    check_field_offset(lv, s207c6f6, ABISELECT(80,52), "S207C6.s207c6f6");
    test_class_info(&lv, &cd_S207C6);
    dp->~S207C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS207C6(Test_S207C6, "S207C6", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S207C6C1Ev();
extern void _ZN6S207C6D1Ev();
Name_Map name_map_S207C6[] = {
  NSPAIR(_ZN6S207C6C1Ev),
  NSPAIR(_ZN6S207C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S207C6[];
extern void _ZN6S207C6D1Ev();
extern void _ZN6S207C6D0Ev();
extern void _ZN6S207C62v4Ev();
extern void _ZN6S207C62v5Ev();
extern void _ZN6S207C62v6Ev();
extern void _ZN6S207C62v7Ev();
extern void _ZN6S207C62v8Ev();
extern void _ZN6S207C62v9Ev();
extern void _ZN6S207C63v10Ev();
extern void _ZN6S207C63v11Ev();
extern void _ZN6S207C63v12Ev();
extern void _ZN6S207C63v13Ev();
extern void _ZN6S207C63v14Ev();
extern void _ZN6S207C63v15Ev();
extern void _ZN6S207C63v16Ev();
extern void _ZN6S207C63v17Ev();
extern void _ZN6S207C63v18Ev();
extern void _ZN6S207C63v19Ev();
extern void _ZN6S207C63v20Ev();
extern void _ZN6S207C63v21Ev();
extern void _ZN6S207C63v22Ev();
extern void _ZN6S207C63v23Ev();
extern void _ZN6S207C63v24Ev();
extern void _ZN6S207C63v25Ev();
extern void _ZN6S207C63v26Ev();
extern void _ZN6S207C63v27Ev();
extern void _ZN6S207C63v28Ev();
extern void _ZN6S207C63v29Ev();
extern void _ZN6S207C63v30Ev();
extern void _ZN6S207C63v31Ev();
extern void _ZN6S207C63v32Ev();
extern void _ZN6S207C63v33Ev();
extern void _ZN6S207C63v34Ev();
extern void _ZN6S207C63v35Ev();
extern void _ZN6S207C63v36Ev();
extern void _ZN6S207C63v37Ev();
extern void _ZN6S207C63v38Ev();
extern void _ZN6S207C63v39Ev();
extern void _ZN6S207C63v40Ev();
extern void _ZN6S207C63v41Ev();
extern void _ZN6S207C63v42Ev();
extern void _ZN6S207C63v43Ev();
extern void _ZN6S207C63v44Ev();
extern void _ZN6S207C63v45Ev();
extern void _ZN6S207C63v46Ev();
extern void _ZN6S207C63v47Ev();
extern void _ZN6S207C63v48Ev();
extern void _ZN6S207C63v49Ev();
extern void _ZN6S207C63v50Ev();
extern void _ZN6S207C63v51Ev();
extern void _ZN6S207C63v52Ev();
extern void _ZN6S207C63v53Ev();
extern void _ZN6S207C63v54Ev();
extern void _ZN6S207C63v55Ev();
extern void _ZN6S207C63v56Ev();
extern void _ZN6S207C63v57Ev();
extern void _ZN6S207C63v58Ev();
extern void _ZN6S207C63v59Ev();
extern void _ZN6S207C63v60Ev();
extern void _ZN6S207C63v61Ev();
extern void _ZN6S207C63v62Ev();
extern void _ZN6S207C63v63Ev();
extern void _ZN6S207C63v64Ev();
extern void _ZN6S207C63v65Ev();
extern void _ZN6S207C63v66Ev();
extern void _ZN6S207C63v67Ev();
static  VTBL_ENTRY vtc_S207C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S207C6[0]),
  (VTBL_ENTRY)&_ZN6S207C6D1Ev,
  (VTBL_ENTRY)&_ZN6S207C6D0Ev,
  (VTBL_ENTRY)&_ZN6S207C62v4Ev,
  (VTBL_ENTRY)&_ZN6S207C62v5Ev,
  (VTBL_ENTRY)&_ZN6S207C62v6Ev,
  (VTBL_ENTRY)&_ZN6S207C62v7Ev,
  (VTBL_ENTRY)&_ZN6S207C62v8Ev,
  (VTBL_ENTRY)&_ZN6S207C62v9Ev,
  (VTBL_ENTRY)&_ZN6S207C63v10Ev,
  (VTBL_ENTRY)&_ZN6S207C63v11Ev,
  (VTBL_ENTRY)&_ZN6S207C63v12Ev,
  (VTBL_ENTRY)&_ZN6S207C63v13Ev,
  (VTBL_ENTRY)&_ZN6S207C63v14Ev,
  (VTBL_ENTRY)&_ZN6S207C63v15Ev,
  (VTBL_ENTRY)&_ZN6S207C63v16Ev,
  (VTBL_ENTRY)&_ZN6S207C63v17Ev,
  (VTBL_ENTRY)&_ZN6S207C63v18Ev,
  (VTBL_ENTRY)&_ZN6S207C63v19Ev,
  (VTBL_ENTRY)&_ZN6S207C63v20Ev,
  (VTBL_ENTRY)&_ZN6S207C63v21Ev,
  (VTBL_ENTRY)&_ZN6S207C63v22Ev,
  (VTBL_ENTRY)&_ZN6S207C63v23Ev,
  (VTBL_ENTRY)&_ZN6S207C63v24Ev,
  (VTBL_ENTRY)&_ZN6S207C63v25Ev,
  (VTBL_ENTRY)&_ZN6S207C63v26Ev,
  (VTBL_ENTRY)&_ZN6S207C63v27Ev,
  (VTBL_ENTRY)&_ZN6S207C63v28Ev,
  (VTBL_ENTRY)&_ZN6S207C63v29Ev,
  (VTBL_ENTRY)&_ZN6S207C63v30Ev,
  (VTBL_ENTRY)&_ZN6S207C63v31Ev,
  (VTBL_ENTRY)&_ZN6S207C63v32Ev,
  (VTBL_ENTRY)&_ZN6S207C63v33Ev,
  (VTBL_ENTRY)&_ZN6S207C63v34Ev,
  (VTBL_ENTRY)&_ZN6S207C63v35Ev,
  (VTBL_ENTRY)&_ZN6S207C63v36Ev,
  (VTBL_ENTRY)&_ZN6S207C63v37Ev,
  (VTBL_ENTRY)&_ZN6S207C63v38Ev,
  (VTBL_ENTRY)&_ZN6S207C63v39Ev,
  (VTBL_ENTRY)&_ZN6S207C63v40Ev,
  (VTBL_ENTRY)&_ZN6S207C63v41Ev,
  (VTBL_ENTRY)&_ZN6S207C63v42Ev,
  (VTBL_ENTRY)&_ZN6S207C63v43Ev,
  (VTBL_ENTRY)&_ZN6S207C63v44Ev,
  (VTBL_ENTRY)&_ZN6S207C63v45Ev,
  (VTBL_ENTRY)&_ZN6S207C63v46Ev,
  (VTBL_ENTRY)&_ZN6S207C63v47Ev,
  (VTBL_ENTRY)&_ZN6S207C63v48Ev,
  (VTBL_ENTRY)&_ZN6S207C63v49Ev,
  (VTBL_ENTRY)&_ZN6S207C63v50Ev,
  (VTBL_ENTRY)&_ZN6S207C63v51Ev,
  (VTBL_ENTRY)&_ZN6S207C63v52Ev,
  (VTBL_ENTRY)&_ZN6S207C63v53Ev,
  (VTBL_ENTRY)&_ZN6S207C63v54Ev,
  (VTBL_ENTRY)&_ZN6S207C63v55Ev,
  (VTBL_ENTRY)&_ZN6S207C63v56Ev,
  (VTBL_ENTRY)&_ZN6S207C63v57Ev,
  (VTBL_ENTRY)&_ZN6S207C63v58Ev,
  (VTBL_ENTRY)&_ZN6S207C63v59Ev,
  (VTBL_ENTRY)&_ZN6S207C63v60Ev,
  (VTBL_ENTRY)&_ZN6S207C63v61Ev,
  (VTBL_ENTRY)&_ZN6S207C63v62Ev,
  (VTBL_ENTRY)&_ZN6S207C63v63Ev,
  (VTBL_ENTRY)&_ZN6S207C63v64Ev,
  (VTBL_ENTRY)&_ZN6S207C63v65Ev,
  (VTBL_ENTRY)&_ZN6S207C63v66Ev,
  (VTBL_ENTRY)&_ZN6S207C63v67Ev,
};
extern VTBL_ENTRY _ZTI6S207C6[];
extern  VTBL_ENTRY _ZTV6S207C6[];
Class_Descriptor cd_S207C6 = {  "S207C6", // class name
  0,0,//no base classes
  &(vtc_S207C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S207C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S207C6),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S207C5  : S207C6 {
  int s207c5f0[2];
  void *s207c5f1;
  int s207c5f2[2];
  ::S273C8_nt s207c5f3;
  ::S273C8_nt s207c5f4;
  ::S8663C5_nt s207c5f5;
  ::S273C8_nt s207c5f6;
  unsigned int s207c5f7:1;
  unsigned int s207c5f8:1;
  unsigned int s207c5f9:1;
  unsigned int s207c5f10:1;
  unsigned int s207c5f11:1;
  int s207c5f12[2];
  virtual  ~S207C5(); // _ZN6S207C5D1Ev
  virtual void  v68(); // _ZN6S207C53v68Ev
  virtual void  v69(); // _ZN6S207C53v69Ev
  virtual void  v70(); // _ZN6S207C53v70Ev
  virtual void  v71(); // _ZN6S207C53v71Ev
  virtual void  v72(); // _ZN6S207C53v72Ev
  virtual void  v73(); // _ZN6S207C53v73Ev
  virtual void  v74(); // _ZN6S207C53v74Ev
  virtual void  v75(); // _ZN6S207C53v75Ev
  virtual void  v76(); // _ZN6S207C53v76Ev
  virtual void  v77(); // _ZN6S207C53v77Ev
  virtual void  v78(); // _ZN6S207C53v78Ev
  virtual void  v79(); // _ZN6S207C53v79Ev
  virtual void  v80(); // _ZN6S207C53v80Ev
  virtual void  v81(); // _ZN6S207C53v81Ev
  virtual void  v82(); // _ZN6S207C53v82Ev
  virtual void  v83(); // _ZN6S207C53v83Ev
  virtual void  v84(); // _ZN6S207C53v84Ev
  virtual void  v85(); // _ZN6S207C53v85Ev
  virtual void  v86(); // _ZN6S207C53v86Ev
  virtual void  v87(); // _ZN6S207C53v87Ev
  virtual void  v88(); // _ZN6S207C53v88Ev
  virtual void  v89(); // _ZN6S207C53v89Ev
  S207C5(); // tgen
};
//SIG(-1 S207C5) C1{ BC2{ vd v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 Fi[2] Fp Fi[2] FC4{ BC5{ BC6{ BC7{ m Fp Fi[2]}}}} FC4 FC8{ m} FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]}


 S207C5 ::~S207C5(){ note_dtor("S207C5", this);}
void  S207C5 ::v68(){vfunc_called(this, "_ZN6S207C53v68Ev");}
void  S207C5 ::v69(){vfunc_called(this, "_ZN6S207C53v69Ev");}
void  S207C5 ::v70(){vfunc_called(this, "_ZN6S207C53v70Ev");}
void  S207C5 ::v71(){vfunc_called(this, "_ZN6S207C53v71Ev");}
void  S207C5 ::v72(){vfunc_called(this, "_ZN6S207C53v72Ev");}
void  S207C5 ::v73(){vfunc_called(this, "_ZN6S207C53v73Ev");}
void  S207C5 ::v74(){vfunc_called(this, "_ZN6S207C53v74Ev");}
void  S207C5 ::v75(){vfunc_called(this, "_ZN6S207C53v75Ev");}
void  S207C5 ::v76(){vfunc_called(this, "_ZN6S207C53v76Ev");}
void  S207C5 ::v77(){vfunc_called(this, "_ZN6S207C53v77Ev");}
void  S207C5 ::v78(){vfunc_called(this, "_ZN6S207C53v78Ev");}
void  S207C5 ::v79(){vfunc_called(this, "_ZN6S207C53v79Ev");}
void  S207C5 ::v80(){vfunc_called(this, "_ZN6S207C53v80Ev");}
void  S207C5 ::v81(){vfunc_called(this, "_ZN6S207C53v81Ev");}
void  S207C5 ::v82(){vfunc_called(this, "_ZN6S207C53v82Ev");}
void  S207C5 ::v83(){vfunc_called(this, "_ZN6S207C53v83Ev");}
void  S207C5 ::v84(){vfunc_called(this, "_ZN6S207C53v84Ev");}
void  S207C5 ::v85(){vfunc_called(this, "_ZN6S207C53v85Ev");}
void  S207C5 ::v86(){vfunc_called(this, "_ZN6S207C53v86Ev");}
void  S207C5 ::v87(){vfunc_called(this, "_ZN6S207C53v87Ev");}
void  S207C5 ::v88(){vfunc_called(this, "_ZN6S207C53v88Ev");}
void  S207C5 ::v89(){vfunc_called(this, "_ZN6S207C53v89Ev");}
S207C5 ::S207C5(){ note_ctor("S207C5", this);} // tgen

static void Test_S207C5()
{
  extern Class_Descriptor cd_S207C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,34)];
    init_test(&cd_S207C5, buf);
    S207C5 *dp, &lv = *(dp=new (buf) S207C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,132), "sizeof(S207C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S207C5)");
    check_base_class_offset(lv, (S207C6*), 0, "S207C5");
    check_field_offset(lv, s207c5f0, ABISELECT(96,60), "S207C5.s207c5f0");
    check_field_offset(lv, s207c5f1, ABISELECT(104,68), "S207C5.s207c5f1");
    check_field_offset(lv, s207c5f2, ABISELECT(112,72), "S207C5.s207c5f2");
    check_field_offset(lv, s207c5f3, ABISELECT(120,80), "S207C5.s207c5f3");
    check_field_offset(lv, s207c5f4, ABISELECT(136,92), "S207C5.s207c5f4");
    check_field_offset(lv, s207c5f5, ABISELECT(152,104), "S207C5.s207c5f5");
    check_field_offset(lv, s207c5f6, ABISELECT(160,108), "S207C5.s207c5f6");
    set_bf_and_test(lv, s207c5f7, ABISELECT(176,120), 0, 1, 1, "S207C5");
    set_bf_and_test(lv, s207c5f8, ABISELECT(176,120), 1, 1, 1, "S207C5");
    set_bf_and_test(lv, s207c5f9, ABISELECT(176,120), 2, 1, 1, "S207C5");
    set_bf_and_test(lv, s207c5f10, ABISELECT(176,120), 3, 1, 1, "S207C5");
    set_bf_and_test(lv, s207c5f11, ABISELECT(176,120), 4, 1, 1, "S207C5");
    check_field_offset(lv, s207c5f12, ABISELECT(180,124), "S207C5.s207c5f12");
    test_class_info(&lv, &cd_S207C5);
    dp->~S207C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS207C5(Test_S207C5, "S207C5", ABISELECT(192,132));

#else // __cplusplus

extern void _ZN6S207C5C1Ev();
extern void _ZN6S207C5D1Ev();
Name_Map name_map_S207C5[] = {
  NSPAIR(_ZN6S207C5C1Ev),
  NSPAIR(_ZN6S207C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S207C6;
extern VTBL_ENTRY _ZTI6S207C6[];
extern  VTBL_ENTRY _ZTV6S207C6[];
static Base_Class bases_S207C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S207C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S207C5[];
extern void _ZN6S207C5D1Ev();
extern void _ZN6S207C5D0Ev();
extern void _ZN6S207C62v4Ev();
extern void _ZN6S207C62v5Ev();
extern void _ZN6S207C62v6Ev();
extern void _ZN6S207C62v7Ev();
extern void _ZN6S207C62v8Ev();
extern void _ZN6S207C62v9Ev();
extern void _ZN6S207C63v10Ev();
extern void _ZN6S207C63v11Ev();
extern void _ZN6S207C63v12Ev();
extern void _ZN6S207C63v13Ev();
extern void _ZN6S207C63v14Ev();
extern void _ZN6S207C63v15Ev();
extern void _ZN6S207C63v16Ev();
extern void _ZN6S207C63v17Ev();
extern void _ZN6S207C63v18Ev();
extern void _ZN6S207C63v19Ev();
extern void _ZN6S207C63v20Ev();
extern void _ZN6S207C63v21Ev();
extern void _ZN6S207C63v22Ev();
extern void _ZN6S207C63v23Ev();
extern void _ZN6S207C63v24Ev();
extern void _ZN6S207C63v25Ev();
extern void _ZN6S207C63v26Ev();
extern void _ZN6S207C63v27Ev();
extern void _ZN6S207C63v28Ev();
extern void _ZN6S207C63v29Ev();
extern void _ZN6S207C63v30Ev();
extern void _ZN6S207C63v31Ev();
extern void _ZN6S207C63v32Ev();
extern void _ZN6S207C63v33Ev();
extern void _ZN6S207C63v34Ev();
extern void _ZN6S207C63v35Ev();
extern void _ZN6S207C63v36Ev();
extern void _ZN6S207C63v37Ev();
extern void _ZN6S207C63v38Ev();
extern void _ZN6S207C63v39Ev();
extern void _ZN6S207C63v40Ev();
extern void _ZN6S207C63v41Ev();
extern void _ZN6S207C63v42Ev();
extern void _ZN6S207C63v43Ev();
extern void _ZN6S207C63v44Ev();
extern void _ZN6S207C63v45Ev();
extern void _ZN6S207C63v46Ev();
extern void _ZN6S207C63v47Ev();
extern void _ZN6S207C63v48Ev();
extern void _ZN6S207C63v49Ev();
extern void _ZN6S207C63v50Ev();
extern void _ZN6S207C63v51Ev();
extern void _ZN6S207C63v52Ev();
extern void _ZN6S207C63v53Ev();
extern void _ZN6S207C63v54Ev();
extern void _ZN6S207C63v55Ev();
extern void _ZN6S207C63v56Ev();
extern void _ZN6S207C63v57Ev();
extern void _ZN6S207C63v58Ev();
extern void _ZN6S207C63v59Ev();
extern void _ZN6S207C63v60Ev();
extern void _ZN6S207C63v61Ev();
extern void _ZN6S207C63v62Ev();
extern void _ZN6S207C63v63Ev();
extern void _ZN6S207C63v64Ev();
extern void _ZN6S207C63v65Ev();
extern void _ZN6S207C63v66Ev();
extern void _ZN6S207C63v67Ev();
extern void _ZN6S207C53v68Ev();
extern void _ZN6S207C53v69Ev();
extern void _ZN6S207C53v70Ev();
extern void _ZN6S207C53v71Ev();
extern void _ZN6S207C53v72Ev();
extern void _ZN6S207C53v73Ev();
extern void _ZN6S207C53v74Ev();
extern void _ZN6S207C53v75Ev();
extern void _ZN6S207C53v76Ev();
extern void _ZN6S207C53v77Ev();
extern void _ZN6S207C53v78Ev();
extern void _ZN6S207C53v79Ev();
extern void _ZN6S207C53v80Ev();
extern void _ZN6S207C53v81Ev();
extern void _ZN6S207C53v82Ev();
extern void _ZN6S207C53v83Ev();
extern void _ZN6S207C53v84Ev();
extern void _ZN6S207C53v85Ev();
extern void _ZN6S207C53v86Ev();
extern void _ZN6S207C53v87Ev();
extern void _ZN6S207C53v88Ev();
extern void _ZN6S207C53v89Ev();
static  VTBL_ENTRY vtc_S207C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S207C5[0]),
  (VTBL_ENTRY)&_ZN6S207C5D1Ev,
  (VTBL_ENTRY)&_ZN6S207C5D0Ev,
  (VTBL_ENTRY)&_ZN6S207C62v4Ev,
  (VTBL_ENTRY)&_ZN6S207C62v5Ev,
  (VTBL_ENTRY)&_ZN6S207C62v6Ev,
  (VTBL_ENTRY)&_ZN6S207C62v7Ev,
  (VTBL_ENTRY)&_ZN6S207C62v8Ev,
  (VTBL_ENTRY)&_ZN6S207C62v9Ev,
  (VTBL_ENTRY)&_ZN6S207C63v10Ev,
  (VTBL_ENTRY)&_ZN6S207C63v11Ev,
  (VTBL_ENTRY)&_ZN6S207C63v12Ev,
  (VTBL_ENTRY)&_ZN6S207C63v13Ev,
  (VTBL_ENTRY)&_ZN6S207C63v14Ev,
  (VTBL_ENTRY)&_ZN6S207C63v15Ev,
  (VTBL_ENTRY)&_ZN6S207C63v16Ev,
  (VTBL_ENTRY)&_ZN6S207C63v17Ev,
  (VTBL_ENTRY)&_ZN6S207C63v18Ev,
  (VTBL_ENTRY)&_ZN6S207C63v19Ev,
  (VTBL_ENTRY)&_ZN6S207C63v20Ev,
  (VTBL_ENTRY)&_ZN6S207C63v21Ev,
  (VTBL_ENTRY)&_ZN6S207C63v22Ev,
  (VTBL_ENTRY)&_ZN6S207C63v23Ev,
  (VTBL_ENTRY)&_ZN6S207C63v24Ev,
  (VTBL_ENTRY)&_ZN6S207C63v25Ev,
  (VTBL_ENTRY)&_ZN6S207C63v26Ev,
  (VTBL_ENTRY)&_ZN6S207C63v27Ev,
  (VTBL_ENTRY)&_ZN6S207C63v28Ev,
  (VTBL_ENTRY)&_ZN6S207C63v29Ev,
  (VTBL_ENTRY)&_ZN6S207C63v30Ev,
  (VTBL_ENTRY)&_ZN6S207C63v31Ev,
  (VTBL_ENTRY)&_ZN6S207C63v32Ev,
  (VTBL_ENTRY)&_ZN6S207C63v33Ev,
  (VTBL_ENTRY)&_ZN6S207C63v34Ev,
  (VTBL_ENTRY)&_ZN6S207C63v35Ev,
  (VTBL_ENTRY)&_ZN6S207C63v36Ev,
  (VTBL_ENTRY)&_ZN6S207C63v37Ev,
  (VTBL_ENTRY)&_ZN6S207C63v38Ev,
  (VTBL_ENTRY)&_ZN6S207C63v39Ev,
  (VTBL_ENTRY)&_ZN6S207C63v40Ev,
  (VTBL_ENTRY)&_ZN6S207C63v41Ev,
  (VTBL_ENTRY)&_ZN6S207C63v42Ev,
  (VTBL_ENTRY)&_ZN6S207C63v43Ev,
  (VTBL_ENTRY)&_ZN6S207C63v44Ev,
  (VTBL_ENTRY)&_ZN6S207C63v45Ev,
  (VTBL_ENTRY)&_ZN6S207C63v46Ev,
  (VTBL_ENTRY)&_ZN6S207C63v47Ev,
  (VTBL_ENTRY)&_ZN6S207C63v48Ev,
  (VTBL_ENTRY)&_ZN6S207C63v49Ev,
  (VTBL_ENTRY)&_ZN6S207C63v50Ev,
  (VTBL_ENTRY)&_ZN6S207C63v51Ev,
  (VTBL_ENTRY)&_ZN6S207C63v52Ev,
  (VTBL_ENTRY)&_ZN6S207C63v53Ev,
  (VTBL_ENTRY)&_ZN6S207C63v54Ev,
  (VTBL_ENTRY)&_ZN6S207C63v55Ev,
  (VTBL_ENTRY)&_ZN6S207C63v56Ev,
  (VTBL_ENTRY)&_ZN6S207C63v57Ev,
  (VTBL_ENTRY)&_ZN6S207C63v58Ev,
  (VTBL_ENTRY)&_ZN6S207C63v59Ev,
  (VTBL_ENTRY)&_ZN6S207C63v60Ev,
  (VTBL_ENTRY)&_ZN6S207C63v61Ev,
  (VTBL_ENTRY)&_ZN6S207C63v62Ev,
  (VTBL_ENTRY)&_ZN6S207C63v63Ev,
  (VTBL_ENTRY)&_ZN6S207C63v64Ev,
  (VTBL_ENTRY)&_ZN6S207C63v65Ev,
  (VTBL_ENTRY)&_ZN6S207C63v66Ev,
  (VTBL_ENTRY)&_ZN6S207C63v67Ev,
  (VTBL_ENTRY)&_ZN6S207C53v68Ev,
  (VTBL_ENTRY)&_ZN6S207C53v69Ev,
  (VTBL_ENTRY)&_ZN6S207C53v70Ev,
  (VTBL_ENTRY)&_ZN6S207C53v71Ev,
  (VTBL_ENTRY)&_ZN6S207C53v72Ev,
  (VTBL_ENTRY)&_ZN6S207C53v73Ev,
  (VTBL_ENTRY)&_ZN6S207C53v74Ev,
  (VTBL_ENTRY)&_ZN6S207C53v75Ev,
  (VTBL_ENTRY)&_ZN6S207C53v76Ev,
  (VTBL_ENTRY)&_ZN6S207C53v77Ev,
  (VTBL_ENTRY)&_ZN6S207C53v78Ev,
  (VTBL_ENTRY)&_ZN6S207C53v79Ev,
  (VTBL_ENTRY)&_ZN6S207C53v80Ev,
  (VTBL_ENTRY)&_ZN6S207C53v81Ev,
  (VTBL_ENTRY)&_ZN6S207C53v82Ev,
  (VTBL_ENTRY)&_ZN6S207C53v83Ev,
  (VTBL_ENTRY)&_ZN6S207C53v84Ev,
  (VTBL_ENTRY)&_ZN6S207C53v85Ev,
  (VTBL_ENTRY)&_ZN6S207C53v86Ev,
  (VTBL_ENTRY)&_ZN6S207C53v87Ev,
  (VTBL_ENTRY)&_ZN6S207C53v88Ev,
  (VTBL_ENTRY)&_ZN6S207C53v89Ev,
};
extern VTBL_ENTRY _ZTI6S207C5[];
extern  VTBL_ENTRY _ZTV6S207C5[];
Class_Descriptor cd_S207C5 = {  "S207C5", // class name
  bases_S207C5, 1,
  &(vtc_S207C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,132), // object size
  NSPAIRA(_ZTI6S207C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S207C5),90, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S207C4  : S207C5 {
  unsigned int s207c4f0:1;
  unsigned int s207c4f1:1;
  unsigned int s207c4f2:1;
  ::S273C21 s207c4f3;
  ::S273C17 s207c4f4;
  ::S273C13 s207c4f5;
  ::S273C9_nt s207c4f6;
  int s207c4f7[3];
  virtual  ~S207C4(); // _ZN6S207C4D1Ev
  virtual void  v90(); // _ZN6S207C43v90Ev
  virtual void  v91(); // _ZN6S207C43v91Ev
  virtual void  v92(); // _ZN6S207C43v92Ev
  virtual void  v93(); // _ZN6S207C43v93Ev
  virtual void  v94(); // _ZN6S207C43v94Ev
  virtual void  v95(); // _ZN6S207C43v95Ev
  virtual void  v96(); // _ZN6S207C43v96Ev
  virtual void  v97(); // _ZN6S207C43v97Ev
  virtual void  v98(); // _ZN6S207C43v98Ev
  virtual void  v99(); // _ZN6S207C43v99Ev
  virtual void  v100(); // _ZN6S207C44v100Ev
  virtual void  v101(); // _ZN6S207C44v101Ev
  virtual void  v102(); // _ZN6S207C44v102Ev
  virtual void  v103(); // _ZN6S207C44v103Ev
  virtual void  v104(); // _ZN6S207C44v104Ev
  virtual void  v105(); // _ZN6S207C44v105Ev
  virtual void  v106(); // _ZN6S207C44v106Ev
  virtual void  v107(); // _ZN6S207C44v107Ev
  virtual void  v108(); // _ZN6S207C44v108Ev
  virtual void  v109(); // _ZN6S207C44v109Ev
  S207C4(); // tgen
};
//SIG(-1 S207C4) C1{ BC2{ BC3{ vd v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 Fi[2] Fp Fi[2] FC5{ BC6{ BC7{ BC8{ m Fp Fi[2]}}}} FC5 FC9{ m} FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 Fi:1 Fi:1 Fi:1 FC10{ BC11{ BC8}} FC12{ BC13{ BC8}} FC14{ BC15{ BC8}} FC6 Fi[3]}


 S207C4 ::~S207C4(){ note_dtor("S207C4", this);}
void  S207C4 ::v90(){vfunc_called(this, "_ZN6S207C43v90Ev");}
void  S207C4 ::v91(){vfunc_called(this, "_ZN6S207C43v91Ev");}
void  S207C4 ::v92(){vfunc_called(this, "_ZN6S207C43v92Ev");}
void  S207C4 ::v93(){vfunc_called(this, "_ZN6S207C43v93Ev");}
void  S207C4 ::v94(){vfunc_called(this, "_ZN6S207C43v94Ev");}
void  S207C4 ::v95(){vfunc_called(this, "_ZN6S207C43v95Ev");}
void  S207C4 ::v96(){vfunc_called(this, "_ZN6S207C43v96Ev");}
void  S207C4 ::v97(){vfunc_called(this, "_ZN6S207C43v97Ev");}
void  S207C4 ::v98(){vfunc_called(this, "_ZN6S207C43v98Ev");}
void  S207C4 ::v99(){vfunc_called(this, "_ZN6S207C43v99Ev");}
void  S207C4 ::v100(){vfunc_called(this, "_ZN6S207C44v100Ev");}
void  S207C4 ::v101(){vfunc_called(this, "_ZN6S207C44v101Ev");}
void  S207C4 ::v102(){vfunc_called(this, "_ZN6S207C44v102Ev");}
void  S207C4 ::v103(){vfunc_called(this, "_ZN6S207C44v103Ev");}
void  S207C4 ::v104(){vfunc_called(this, "_ZN6S207C44v104Ev");}
void  S207C4 ::v105(){vfunc_called(this, "_ZN6S207C44v105Ev");}
void  S207C4 ::v106(){vfunc_called(this, "_ZN6S207C44v106Ev");}
void  S207C4 ::v107(){vfunc_called(this, "_ZN6S207C44v107Ev");}
void  S207C4 ::v108(){vfunc_called(this, "_ZN6S207C44v108Ev");}
void  S207C4 ::v109(){vfunc_called(this, "_ZN6S207C44v109Ev");}
S207C4 ::S207C4(){ note_ctor("S207C4", this);} // tgen

static void Test_S207C4()
{
  extern Class_Descriptor cd_S207C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,50)];
    init_test(&cd_S207C4, buf);
    S207C4 *dp, &lv = *(dp=new (buf) S207C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,196), "sizeof(S207C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S207C4)");
    check_base_class_offset(lv, (S207C6*)(S207C5*), 0, "S207C4");
    check_base_class_offset(lv, (S207C5*), 0, "S207C4");
    set_bf_and_test(lv, s207c4f0, ABISELECT(188,132), 0, 1, 1, "S207C4");
    set_bf_and_test(lv, s207c4f1, ABISELECT(188,132), 1, 1, 1, "S207C4");
    set_bf_and_test(lv, s207c4f2, ABISELECT(188,132), 2, 1, 1, "S207C4");
    check_field_offset(lv, s207c4f3, ABISELECT(192,136), "S207C4.s207c4f3");
    check_field_offset(lv, s207c4f4, ABISELECT(208,148), "S207C4.s207c4f4");
    check_field_offset(lv, s207c4f5, ABISELECT(224,160), "S207C4.s207c4f5");
    check_field_offset(lv, s207c4f6, ABISELECT(240,172), "S207C4.s207c4f6");
    check_field_offset(lv, s207c4f7, ABISELECT(256,184), "S207C4.s207c4f7");
    test_class_info(&lv, &cd_S207C4);
    dp->~S207C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS207C4(Test_S207C4, "S207C4", ABISELECT(272,196));

#else // __cplusplus

extern void _ZN6S207C4C1Ev();
extern void _ZN6S207C4D1Ev();
Name_Map name_map_S207C4[] = {
  NSPAIR(_ZN6S207C4C1Ev),
  NSPAIR(_ZN6S207C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S207C6;
extern VTBL_ENTRY _ZTI6S207C6[];
extern  VTBL_ENTRY _ZTV6S207C6[];
extern Class_Descriptor cd_S207C5;
extern VTBL_ENTRY _ZTI6S207C5[];
extern  VTBL_ENTRY _ZTV6S207C5[];
static Base_Class bases_S207C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S207C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S207C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S207C4[];
extern void _ZN6S207C4D1Ev();
extern void _ZN6S207C4D0Ev();
extern void _ZN6S207C62v4Ev();
extern void _ZN6S207C62v5Ev();
extern void _ZN6S207C62v6Ev();
extern void _ZN6S207C62v7Ev();
extern void _ZN6S207C62v8Ev();
extern void _ZN6S207C62v9Ev();
extern void _ZN6S207C63v10Ev();
extern void _ZN6S207C63v11Ev();
extern void _ZN6S207C63v12Ev();
extern void _ZN6S207C63v13Ev();
extern void _ZN6S207C63v14Ev();
extern void _ZN6S207C63v15Ev();
extern void _ZN6S207C63v16Ev();
extern void _ZN6S207C63v17Ev();
extern void _ZN6S207C63v18Ev();
extern void _ZN6S207C63v19Ev();
extern void _ZN6S207C63v20Ev();
extern void _ZN6S207C63v21Ev();
extern void _ZN6S207C63v22Ev();
extern void _ZN6S207C63v23Ev();
extern void _ZN6S207C63v24Ev();
extern void _ZN6S207C63v25Ev();
extern void _ZN6S207C63v26Ev();
extern void _ZN6S207C63v27Ev();
extern void _ZN6S207C63v28Ev();
extern void _ZN6S207C63v29Ev();
extern void _ZN6S207C63v30Ev();
extern void _ZN6S207C63v31Ev();
extern void _ZN6S207C63v32Ev();
extern void _ZN6S207C63v33Ev();
extern void _ZN6S207C63v34Ev();
extern void _ZN6S207C63v35Ev();
extern void _ZN6S207C63v36Ev();
extern void _ZN6S207C63v37Ev();
extern void _ZN6S207C63v38Ev();
extern void _ZN6S207C63v39Ev();
extern void _ZN6S207C63v40Ev();
extern void _ZN6S207C63v41Ev();
extern void _ZN6S207C63v42Ev();
extern void _ZN6S207C63v43Ev();
extern void _ZN6S207C63v44Ev();
extern void _ZN6S207C63v45Ev();
extern void _ZN6S207C63v46Ev();
extern void _ZN6S207C63v47Ev();
extern void _ZN6S207C63v48Ev();
extern void _ZN6S207C63v49Ev();
extern void _ZN6S207C63v50Ev();
extern void _ZN6S207C63v51Ev();
extern void _ZN6S207C63v52Ev();
extern void _ZN6S207C63v53Ev();
extern void _ZN6S207C63v54Ev();
extern void _ZN6S207C63v55Ev();
extern void _ZN6S207C63v56Ev();
extern void _ZN6S207C63v57Ev();
extern void _ZN6S207C63v58Ev();
extern void _ZN6S207C63v59Ev();
extern void _ZN6S207C63v60Ev();
extern void _ZN6S207C63v61Ev();
extern void _ZN6S207C63v62Ev();
extern void _ZN6S207C63v63Ev();
extern void _ZN6S207C63v64Ev();
extern void _ZN6S207C63v65Ev();
extern void _ZN6S207C63v66Ev();
extern void _ZN6S207C63v67Ev();
extern void _ZN6S207C53v68Ev();
extern void _ZN6S207C53v69Ev();
extern void _ZN6S207C53v70Ev();
extern void _ZN6S207C53v71Ev();
extern void _ZN6S207C53v72Ev();
extern void _ZN6S207C53v73Ev();
extern void _ZN6S207C53v74Ev();
extern void _ZN6S207C53v75Ev();
extern void _ZN6S207C53v76Ev();
extern void _ZN6S207C53v77Ev();
extern void _ZN6S207C53v78Ev();
extern void _ZN6S207C53v79Ev();
extern void _ZN6S207C53v80Ev();
extern void _ZN6S207C53v81Ev();
extern void _ZN6S207C53v82Ev();
extern void _ZN6S207C53v83Ev();
extern void _ZN6S207C53v84Ev();
extern void _ZN6S207C53v85Ev();
extern void _ZN6S207C53v86Ev();
extern void _ZN6S207C53v87Ev();
extern void _ZN6S207C53v88Ev();
extern void _ZN6S207C53v89Ev();
extern void _ZN6S207C43v90Ev();
extern void _ZN6S207C43v91Ev();
extern void _ZN6S207C43v92Ev();
extern void _ZN6S207C43v93Ev();
extern void _ZN6S207C43v94Ev();
extern void _ZN6S207C43v95Ev();
extern void _ZN6S207C43v96Ev();
extern void _ZN6S207C43v97Ev();
extern void _ZN6S207C43v98Ev();
extern void _ZN6S207C43v99Ev();
extern void _ZN6S207C44v100Ev();
extern void _ZN6S207C44v101Ev();
extern void _ZN6S207C44v102Ev();
extern void _ZN6S207C44v103Ev();
extern void _ZN6S207C44v104Ev();
extern void _ZN6S207C44v105Ev();
extern void _ZN6S207C44v106Ev();
extern void _ZN6S207C44v107Ev();
extern void _ZN6S207C44v108Ev();
extern void _ZN6S207C44v109Ev();
static  VTBL_ENTRY vtc_S207C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S207C4[0]),
  (VTBL_ENTRY)&_ZN6S207C4D1Ev,
  (VTBL_ENTRY)&_ZN6S207C4D0Ev,
  (VTBL_ENTRY)&_ZN6S207C62v4Ev,
  (VTBL_ENTRY)&_ZN6S207C62v5Ev,
  (VTBL_ENTRY)&_ZN6S207C62v6Ev,
  (VTBL_ENTRY)&_ZN6S207C62v7Ev,
  (VTBL_ENTRY)&_ZN6S207C62v8Ev,
  (VTBL_ENTRY)&_ZN6S207C62v9Ev,
  (VTBL_ENTRY)&_ZN6S207C63v10Ev,
  (VTBL_ENTRY)&_ZN6S207C63v11Ev,
  (VTBL_ENTRY)&_ZN6S207C63v12Ev,
  (VTBL_ENTRY)&_ZN6S207C63v13Ev,
  (VTBL_ENTRY)&_ZN6S207C63v14Ev,
  (VTBL_ENTRY)&_ZN6S207C63v15Ev,
  (VTBL_ENTRY)&_ZN6S207C63v16Ev,
  (VTBL_ENTRY)&_ZN6S207C63v17Ev,
  (VTBL_ENTRY)&_ZN6S207C63v18Ev,
  (VTBL_ENTRY)&_ZN6S207C63v19Ev,
  (VTBL_ENTRY)&_ZN6S207C63v20Ev,
  (VTBL_ENTRY)&_ZN6S207C63v21Ev,
  (VTBL_ENTRY)&_ZN6S207C63v22Ev,
  (VTBL_ENTRY)&_ZN6S207C63v23Ev,
  (VTBL_ENTRY)&_ZN6S207C63v24Ev,
  (VTBL_ENTRY)&_ZN6S207C63v25Ev,
  (VTBL_ENTRY)&_ZN6S207C63v26Ev,
  (VTBL_ENTRY)&_ZN6S207C63v27Ev,
  (VTBL_ENTRY)&_ZN6S207C63v28Ev,
  (VTBL_ENTRY)&_ZN6S207C63v29Ev,
  (VTBL_ENTRY)&_ZN6S207C63v30Ev,
  (VTBL_ENTRY)&_ZN6S207C63v31Ev,
  (VTBL_ENTRY)&_ZN6S207C63v32Ev,
  (VTBL_ENTRY)&_ZN6S207C63v33Ev,
  (VTBL_ENTRY)&_ZN6S207C63v34Ev,
  (VTBL_ENTRY)&_ZN6S207C63v35Ev,
  (VTBL_ENTRY)&_ZN6S207C63v36Ev,
  (VTBL_ENTRY)&_ZN6S207C63v37Ev,
  (VTBL_ENTRY)&_ZN6S207C63v38Ev,
  (VTBL_ENTRY)&_ZN6S207C63v39Ev,
  (VTBL_ENTRY)&_ZN6S207C63v40Ev,
  (VTBL_ENTRY)&_ZN6S207C63v41Ev,
  (VTBL_ENTRY)&_ZN6S207C63v42Ev,
  (VTBL_ENTRY)&_ZN6S207C63v43Ev,
  (VTBL_ENTRY)&_ZN6S207C63v44Ev,
  (VTBL_ENTRY)&_ZN6S207C63v45Ev,
  (VTBL_ENTRY)&_ZN6S207C63v46Ev,
  (VTBL_ENTRY)&_ZN6S207C63v47Ev,
  (VTBL_ENTRY)&_ZN6S207C63v48Ev,
  (VTBL_ENTRY)&_ZN6S207C63v49Ev,
  (VTBL_ENTRY)&_ZN6S207C63v50Ev,
  (VTBL_ENTRY)&_ZN6S207C63v51Ev,
  (VTBL_ENTRY)&_ZN6S207C63v52Ev,
  (VTBL_ENTRY)&_ZN6S207C63v53Ev,
  (VTBL_ENTRY)&_ZN6S207C63v54Ev,
  (VTBL_ENTRY)&_ZN6S207C63v55Ev,
  (VTBL_ENTRY)&_ZN6S207C63v56Ev,
  (VTBL_ENTRY)&_ZN6S207C63v57Ev,
  (VTBL_ENTRY)&_ZN6S207C63v58Ev,
  (VTBL_ENTRY)&_ZN6S207C63v59Ev,
  (VTBL_ENTRY)&_ZN6S207C63v60Ev,
  (VTBL_ENTRY)&_ZN6S207C63v61Ev,
  (VTBL_ENTRY)&_ZN6S207C63v62Ev,
  (VTBL_ENTRY)&_ZN6S207C63v63Ev,
  (VTBL_ENTRY)&_ZN6S207C63v64Ev,
  (VTBL_ENTRY)&_ZN6S207C63v65Ev,
  (VTBL_ENTRY)&_ZN6S207C63v66Ev,
  (VTBL_ENTRY)&_ZN6S207C63v67Ev,
  (VTBL_ENTRY)&_ZN6S207C53v68Ev,
  (VTBL_ENTRY)&_ZN6S207C53v69Ev,
  (VTBL_ENTRY)&_ZN6S207C53v70Ev,
  (VTBL_ENTRY)&_ZN6S207C53v71Ev,
  (VTBL_ENTRY)&_ZN6S207C53v72Ev,
  (VTBL_ENTRY)&_ZN6S207C53v73Ev,
  (VTBL_ENTRY)&_ZN6S207C53v74Ev,
  (VTBL_ENTRY)&_ZN6S207C53v75Ev,
  (VTBL_ENTRY)&_ZN6S207C53v76Ev,
  (VTBL_ENTRY)&_ZN6S207C53v77Ev,
  (VTBL_ENTRY)&_ZN6S207C53v78Ev,
  (VTBL_ENTRY)&_ZN6S207C53v79Ev,
  (VTBL_ENTRY)&_ZN6S207C53v80Ev,
  (VTBL_ENTRY)&_ZN6S207C53v81Ev,
  (VTBL_ENTRY)&_ZN6S207C53v82Ev,
  (VTBL_ENTRY)&_ZN6S207C53v83Ev,
  (VTBL_ENTRY)&_ZN6S207C53v84Ev,
  (VTBL_ENTRY)&_ZN6S207C53v85Ev,
  (VTBL_ENTRY)&_ZN6S207C53v86Ev,
  (VTBL_ENTRY)&_ZN6S207C53v87Ev,
  (VTBL_ENTRY)&_ZN6S207C53v88Ev,
  (VTBL_ENTRY)&_ZN6S207C53v89Ev,
  (VTBL_ENTRY)&_ZN6S207C43v90Ev,
  (VTBL_ENTRY)&_ZN6S207C43v91Ev,
  (VTBL_ENTRY)&_ZN6S207C43v92Ev,
  (VTBL_ENTRY)&_ZN6S207C43v93Ev,
  (VTBL_ENTRY)&_ZN6S207C43v94Ev,
  (VTBL_ENTRY)&_ZN6S207C43v95Ev,
  (VTBL_ENTRY)&_ZN6S207C43v96Ev,
  (VTBL_ENTRY)&_ZN6S207C43v97Ev,
  (VTBL_ENTRY)&_ZN6S207C43v98Ev,
  (VTBL_ENTRY)&_ZN6S207C43v99Ev,
  (VTBL_ENTRY)&_ZN6S207C44v100Ev,
  (VTBL_ENTRY)&_ZN6S207C44v101Ev,
  (VTBL_ENTRY)&_ZN6S207C44v102Ev,
  (VTBL_ENTRY)&_ZN6S207C44v103Ev,
  (VTBL_ENTRY)&_ZN6S207C44v104Ev,
  (VTBL_ENTRY)&_ZN6S207C44v105Ev,
  (VTBL_ENTRY)&_ZN6S207C44v106Ev,
  (VTBL_ENTRY)&_ZN6S207C44v107Ev,
  (VTBL_ENTRY)&_ZN6S207C44v108Ev,
  (VTBL_ENTRY)&_ZN6S207C44v109Ev,
};
extern VTBL_ENTRY _ZTI6S207C4[];
extern  VTBL_ENTRY _ZTV6S207C4[];
Class_Descriptor cd_S207C4 = {  "S207C4", // class name
  bases_S207C4, 2,
  &(vtc_S207C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,196), // object size
  NSPAIRA(_ZTI6S207C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S207C4),110, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S207C22  : S273C11_nt {
};
//SIG(-1 S207C22) C1{ BC2{ m Fp Fi[2]}}



static void Test_S207C22()
{
  extern Class_Descriptor cd_S207C22;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S207C22, buf);
    S207C22 &lv = *(new (buf) S207C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S207C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S207C22)");
    check_base_class_offset(lv, (S273C11_nt*), 0, "S207C22");
    test_class_info(&lv, &cd_S207C22);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS207C22(Test_S207C22, "S207C22", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S273C11_nt;
static Base_Class bases_S207C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S207C22 = {  "S207C22", // class name
  bases_S207C22, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S207C21_nt  : S207C22 {
};
//SIG(-1 S207C21_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S207C21_nt

#else // __cplusplus

extern Class_Descriptor cd_S273C11_nt;
extern Class_Descriptor cd_S207C22;
static Base_Class bases_S207C21_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S207C22,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S207C3  : S207C4 {
  ::S273C7_nt s207c3f0;
  unsigned int s207c3f1:1;
  ::S207C21_nt s207c3f2;
  virtual  ~S207C3(); // _ZN6S207C3D1Ev
  virtual void  v110(); // _ZN6S207C34v110Ev
  virtual void  v111(); // _ZN6S207C34v111Ev
  virtual void  v112(); // _ZN6S207C34v112Ev
  virtual void  v113(); // _ZN6S207C34v113Ev
  S207C3(); // tgen
};
//SIG(-1 S207C3) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi[2] Fp Fi[2] FC6{ BC7{ BC8{ BC9{ m Fp Fi[2]}}}} FC6 FC10{ m} FC6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 Fi:1 Fi:1 Fi:1 FC11{ BC12{ BC9}} FC13{ BC14{ BC9}} FC15{ BC16{ BC9}} FC7 Fi[3]} vd v1 v2 v3 v4 FC5 Fi:1 FC17{ BC18{ BC9}}}


 S207C3 ::~S207C3(){ note_dtor("S207C3", this);}
void  S207C3 ::v110(){vfunc_called(this, "_ZN6S207C34v110Ev");}
void  S207C3 ::v111(){vfunc_called(this, "_ZN6S207C34v111Ev");}
void  S207C3 ::v112(){vfunc_called(this, "_ZN6S207C34v112Ev");}
void  S207C3 ::v113(){vfunc_called(this, "_ZN6S207C34v113Ev");}
S207C3 ::S207C3(){ note_ctor("S207C3", this);} // tgen

static void Test_S207C3()
{
  extern Class_Descriptor cd_S207C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,56)];
    init_test(&cd_S207C3, buf);
    S207C3 *dp, &lv = *(dp=new (buf) S207C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,220), "sizeof(S207C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S207C3)");
    check_base_class_offset(lv, (S207C6*)(S207C5*)(S207C4*), 0, "S207C3");
    check_base_class_offset(lv, (S207C5*)(S207C4*), 0, "S207C3");
    check_base_class_offset(lv, (S207C4*), 0, "S207C3");
    check_field_offset(lv, s207c3f0, ABISELECT(268,196), "S207C3.s207c3f0");
    set_bf_and_test(lv, s207c3f1, ABISELECT(276,204), 0, 1, 1, "S207C3");
    check_field_offset(lv, s207c3f2, ABISELECT(280,208), "S207C3.s207c3f2");
    test_class_info(&lv, &cd_S207C3);
    dp->~S207C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS207C3(Test_S207C3, "S207C3", ABISELECT(296,220));

#else // __cplusplus

extern void _ZN6S207C3C1Ev();
extern void _ZN6S207C3D1Ev();
Name_Map name_map_S207C3[] = {
  NSPAIR(_ZN6S207C3C1Ev),
  NSPAIR(_ZN6S207C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S207C6;
extern VTBL_ENTRY _ZTI6S207C6[];
extern  VTBL_ENTRY _ZTV6S207C6[];
extern Class_Descriptor cd_S207C5;
extern VTBL_ENTRY _ZTI6S207C5[];
extern  VTBL_ENTRY _ZTV6S207C5[];
extern Class_Descriptor cd_S207C4;
extern VTBL_ENTRY _ZTI6S207C4[];
extern  VTBL_ENTRY _ZTV6S207C4[];
static Base_Class bases_S207C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S207C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S207C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S207C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S207C3[];
extern void _ZN6S207C3D1Ev();
extern void _ZN6S207C3D0Ev();
extern void _ZN6S207C62v4Ev();
extern void _ZN6S207C62v5Ev();
extern void _ZN6S207C62v6Ev();
extern void _ZN6S207C62v7Ev();
extern void _ZN6S207C62v8Ev();
extern void _ZN6S207C62v9Ev();
extern void _ZN6S207C63v10Ev();
extern void _ZN6S207C63v11Ev();
extern void _ZN6S207C63v12Ev();
extern void _ZN6S207C63v13Ev();
extern void _ZN6S207C63v14Ev();
extern void _ZN6S207C63v15Ev();
extern void _ZN6S207C63v16Ev();
extern void _ZN6S207C63v17Ev();
extern void _ZN6S207C63v18Ev();
extern void _ZN6S207C63v19Ev();
extern void _ZN6S207C63v20Ev();
extern void _ZN6S207C63v21Ev();
extern void _ZN6S207C63v22Ev();
extern void _ZN6S207C63v23Ev();
extern void _ZN6S207C63v24Ev();
extern void _ZN6S207C63v25Ev();
extern void _ZN6S207C63v26Ev();
extern void _ZN6S207C63v27Ev();
extern void _ZN6S207C63v28Ev();
extern void _ZN6S207C63v29Ev();
extern void _ZN6S207C63v30Ev();
extern void _ZN6S207C63v31Ev();
extern void _ZN6S207C63v32Ev();
extern void _ZN6S207C63v33Ev();
extern void _ZN6S207C63v34Ev();
extern void _ZN6S207C63v35Ev();
extern void _ZN6S207C63v36Ev();
extern void _ZN6S207C63v37Ev();
extern void _ZN6S207C63v38Ev();
extern void _ZN6S207C63v39Ev();
extern void _ZN6S207C63v40Ev();
extern void _ZN6S207C63v41Ev();
extern void _ZN6S207C63v42Ev();
extern void _ZN6S207C63v43Ev();
extern void _ZN6S207C63v44Ev();
extern void _ZN6S207C63v45Ev();
extern void _ZN6S207C63v46Ev();
extern void _ZN6S207C63v47Ev();
extern void _ZN6S207C63v48Ev();
extern void _ZN6S207C63v49Ev();
extern void _ZN6S207C63v50Ev();
extern void _ZN6S207C63v51Ev();
extern void _ZN6S207C63v52Ev();
extern void _ZN6S207C63v53Ev();
extern void _ZN6S207C63v54Ev();
extern void _ZN6S207C63v55Ev();
extern void _ZN6S207C63v56Ev();
extern void _ZN6S207C63v57Ev();
extern void _ZN6S207C63v58Ev();
extern void _ZN6S207C63v59Ev();
extern void _ZN6S207C63v60Ev();
extern void _ZN6S207C63v61Ev();
extern void _ZN6S207C63v62Ev();
extern void _ZN6S207C63v63Ev();
extern void _ZN6S207C63v64Ev();
extern void _ZN6S207C63v65Ev();
extern void _ZN6S207C63v66Ev();
extern void _ZN6S207C63v67Ev();
extern void _ZN6S207C53v68Ev();
extern void _ZN6S207C53v69Ev();
extern void _ZN6S207C53v70Ev();
extern void _ZN6S207C53v71Ev();
extern void _ZN6S207C53v72Ev();
extern void _ZN6S207C53v73Ev();
extern void _ZN6S207C53v74Ev();
extern void _ZN6S207C53v75Ev();
extern void _ZN6S207C53v76Ev();
extern void _ZN6S207C53v77Ev();
extern void _ZN6S207C53v78Ev();
extern void _ZN6S207C53v79Ev();
extern void _ZN6S207C53v80Ev();
extern void _ZN6S207C53v81Ev();
extern void _ZN6S207C53v82Ev();
extern void _ZN6S207C53v83Ev();
extern void _ZN6S207C53v84Ev();
extern void _ZN6S207C53v85Ev();
extern void _ZN6S207C53v86Ev();
extern void _ZN6S207C53v87Ev();
extern void _ZN6S207C53v88Ev();
extern void _ZN6S207C53v89Ev();
extern void _ZN6S207C43v90Ev();
extern void _ZN6S207C43v91Ev();
extern void _ZN6S207C43v92Ev();
extern void _ZN6S207C43v93Ev();
extern void _ZN6S207C43v94Ev();
extern void _ZN6S207C43v95Ev();
extern void _ZN6S207C43v96Ev();
extern void _ZN6S207C43v97Ev();
extern void _ZN6S207C43v98Ev();
extern void _ZN6S207C43v99Ev();
extern void _ZN6S207C44v100Ev();
extern void _ZN6S207C44v101Ev();
extern void _ZN6S207C44v102Ev();
extern void _ZN6S207C44v103Ev();
extern void _ZN6S207C44v104Ev();
extern void _ZN6S207C44v105Ev();
extern void _ZN6S207C44v106Ev();
extern void _ZN6S207C44v107Ev();
extern void _ZN6S207C44v108Ev();
extern void _ZN6S207C44v109Ev();
extern void _ZN6S207C34v110Ev();
extern void _ZN6S207C34v111Ev();
extern void _ZN6S207C34v112Ev();
extern void _ZN6S207C34v113Ev();
static  VTBL_ENTRY vtc_S207C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S207C3[0]),
  (VTBL_ENTRY)&_ZN6S207C3D1Ev,
  (VTBL_ENTRY)&_ZN6S207C3D0Ev,
  (VTBL_ENTRY)&_ZN6S207C62v4Ev,
  (VTBL_ENTRY)&_ZN6S207C62v5Ev,
  (VTBL_ENTRY)&_ZN6S207C62v6Ev,
  (VTBL_ENTRY)&_ZN6S207C62v7Ev,
  (VTBL_ENTRY)&_ZN6S207C62v8Ev,
  (VTBL_ENTRY)&_ZN6S207C62v9Ev,
  (VTBL_ENTRY)&_ZN6S207C63v10Ev,
  (VTBL_ENTRY)&_ZN6S207C63v11Ev,
  (VTBL_ENTRY)&_ZN6S207C63v12Ev,
  (VTBL_ENTRY)&_ZN6S207C63v13Ev,
  (VTBL_ENTRY)&_ZN6S207C63v14Ev,
  (VTBL_ENTRY)&_ZN6S207C63v15Ev,
  (VTBL_ENTRY)&_ZN6S207C63v16Ev,
  (VTBL_ENTRY)&_ZN6S207C63v17Ev,
  (VTBL_ENTRY)&_ZN6S207C63v18Ev,
  (VTBL_ENTRY)&_ZN6S207C63v19Ev,
  (VTBL_ENTRY)&_ZN6S207C63v20Ev,
  (VTBL_ENTRY)&_ZN6S207C63v21Ev,
  (VTBL_ENTRY)&_ZN6S207C63v22Ev,
  (VTBL_ENTRY)&_ZN6S207C63v23Ev,
  (VTBL_ENTRY)&_ZN6S207C63v24Ev,
  (VTBL_ENTRY)&_ZN6S207C63v25Ev,
  (VTBL_ENTRY)&_ZN6S207C63v26Ev,
  (VTBL_ENTRY)&_ZN6S207C63v27Ev,
  (VTBL_ENTRY)&_ZN6S207C63v28Ev,
  (VTBL_ENTRY)&_ZN6S207C63v29Ev,
  (VTBL_ENTRY)&_ZN6S207C63v30Ev,
  (VTBL_ENTRY)&_ZN6S207C63v31Ev,
  (VTBL_ENTRY)&_ZN6S207C63v32Ev,
  (VTBL_ENTRY)&_ZN6S207C63v33Ev,
  (VTBL_ENTRY)&_ZN6S207C63v34Ev,
  (VTBL_ENTRY)&_ZN6S207C63v35Ev,
  (VTBL_ENTRY)&_ZN6S207C63v36Ev,
  (VTBL_ENTRY)&_ZN6S207C63v37Ev,
  (VTBL_ENTRY)&_ZN6S207C63v38Ev,
  (VTBL_ENTRY)&_ZN6S207C63v39Ev,
  (VTBL_ENTRY)&_ZN6S207C63v40Ev,
  (VTBL_ENTRY)&_ZN6S207C63v41Ev,
  (VTBL_ENTRY)&_ZN6S207C63v42Ev,
  (VTBL_ENTRY)&_ZN6S207C63v43Ev,
  (VTBL_ENTRY)&_ZN6S207C63v44Ev,
  (VTBL_ENTRY)&_ZN6S207C63v45Ev,
  (VTBL_ENTRY)&_ZN6S207C63v46Ev,
  (VTBL_ENTRY)&_ZN6S207C63v47Ev,
  (VTBL_ENTRY)&_ZN6S207C63v48Ev,
  (VTBL_ENTRY)&_ZN6S207C63v49Ev,
  (VTBL_ENTRY)&_ZN6S207C63v50Ev,
  (VTBL_ENTRY)&_ZN6S207C63v51Ev,
  (VTBL_ENTRY)&_ZN6S207C63v52Ev,
  (VTBL_ENTRY)&_ZN6S207C63v53Ev,
  (VTBL_ENTRY)&_ZN6S207C63v54Ev,
  (VTBL_ENTRY)&_ZN6S207C63v55Ev,
  (VTBL_ENTRY)&_ZN6S207C63v56Ev,
  (VTBL_ENTRY)&_ZN6S207C63v57Ev,
  (VTBL_ENTRY)&_ZN6S207C63v58Ev,
  (VTBL_ENTRY)&_ZN6S207C63v59Ev,
  (VTBL_ENTRY)&_ZN6S207C63v60Ev,
  (VTBL_ENTRY)&_ZN6S207C63v61Ev,
  (VTBL_ENTRY)&_ZN6S207C63v62Ev,
  (VTBL_ENTRY)&_ZN6S207C63v63Ev,
  (VTBL_ENTRY)&_ZN6S207C63v64Ev,
  (VTBL_ENTRY)&_ZN6S207C63v65Ev,
  (VTBL_ENTRY)&_ZN6S207C63v66Ev,
  (VTBL_ENTRY)&_ZN6S207C63v67Ev,
  (VTBL_ENTRY)&_ZN6S207C53v68Ev,
  (VTBL_ENTRY)&_ZN6S207C53v69Ev,
  (VTBL_ENTRY)&_ZN6S207C53v70Ev,
  (VTBL_ENTRY)&_ZN6S207C53v71Ev,
  (VTBL_ENTRY)&_ZN6S207C53v72Ev,
  (VTBL_ENTRY)&_ZN6S207C53v73Ev,
  (VTBL_ENTRY)&_ZN6S207C53v74Ev,
  (VTBL_ENTRY)&_ZN6S207C53v75Ev,
  (VTBL_ENTRY)&_ZN6S207C53v76Ev,
  (VTBL_ENTRY)&_ZN6S207C53v77Ev,
  (VTBL_ENTRY)&_ZN6S207C53v78Ev,
  (VTBL_ENTRY)&_ZN6S207C53v79Ev,
  (VTBL_ENTRY)&_ZN6S207C53v80Ev,
  (VTBL_ENTRY)&_ZN6S207C53v81Ev,
  (VTBL_ENTRY)&_ZN6S207C53v82Ev,
  (VTBL_ENTRY)&_ZN6S207C53v83Ev,
  (VTBL_ENTRY)&_ZN6S207C53v84Ev,
  (VTBL_ENTRY)&_ZN6S207C53v85Ev,
  (VTBL_ENTRY)&_ZN6S207C53v86Ev,
  (VTBL_ENTRY)&_ZN6S207C53v87Ev,
  (VTBL_ENTRY)&_ZN6S207C53v88Ev,
  (VTBL_ENTRY)&_ZN6S207C53v89Ev,
  (VTBL_ENTRY)&_ZN6S207C43v90Ev,
  (VTBL_ENTRY)&_ZN6S207C43v91Ev,
  (VTBL_ENTRY)&_ZN6S207C43v92Ev,
  (VTBL_ENTRY)&_ZN6S207C43v93Ev,
  (VTBL_ENTRY)&_ZN6S207C43v94Ev,
  (VTBL_ENTRY)&_ZN6S207C43v95Ev,
  (VTBL_ENTRY)&_ZN6S207C43v96Ev,
  (VTBL_ENTRY)&_ZN6S207C43v97Ev,
  (VTBL_ENTRY)&_ZN6S207C43v98Ev,
  (VTBL_ENTRY)&_ZN6S207C43v99Ev,
  (VTBL_ENTRY)&_ZN6S207C44v100Ev,
  (VTBL_ENTRY)&_ZN6S207C44v101Ev,
  (VTBL_ENTRY)&_ZN6S207C44v102Ev,
  (VTBL_ENTRY)&_ZN6S207C44v103Ev,
  (VTBL_ENTRY)&_ZN6S207C44v104Ev,
  (VTBL_ENTRY)&_ZN6S207C44v105Ev,
  (VTBL_ENTRY)&_ZN6S207C44v106Ev,
  (VTBL_ENTRY)&_ZN6S207C44v107Ev,
  (VTBL_ENTRY)&_ZN6S207C44v108Ev,
  (VTBL_ENTRY)&_ZN6S207C44v109Ev,
  (VTBL_ENTRY)&_ZN6S207C34v110Ev,
  (VTBL_ENTRY)&_ZN6S207C34v111Ev,
  (VTBL_ENTRY)&_ZN6S207C34v112Ev,
  (VTBL_ENTRY)&_ZN6S207C34v113Ev,
};
extern VTBL_ENTRY _ZTI6S207C3[];
extern  VTBL_ENTRY _ZTV6S207C3[];
Class_Descriptor cd_S207C3 = {  "S207C3", // class name
  bases_S207C3, 3,
  &(vtc_S207C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,220), // object size
  NSPAIRA(_ZTI6S207C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S207C3),114, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S207C2_nt  : S207C3 {
  int s207c2f0;
  unsigned int s207c2f1:1;
  virtual  ~S207C2_nt(); // _ZN9S207C2_ntD1Ev
  virtual void  v114(); // _ZN9S207C2_nt4v114Ev
  virtual void  v115(); // _ZN9S207C2_nt4v115Ev
  virtual void  v116(); // _ZN9S207C2_nt4v116Ev
  virtual void  v117(); // _ZN9S207C2_nt4v117Ev
  virtual void  v118(); // _ZN9S207C2_nt4v118Ev
  virtual void  v119(); // _ZN9S207C2_nt4v119Ev
  virtual void  v120(); // _ZN9S207C2_nt4v120Ev
  virtual void  v121(); // _ZN9S207C2_nt4v121Ev
  S207C2_nt(); // tgen
};
//SIG(-1 S207C2_nt) C1{ BC2{ BC3{ BC4{ BC5{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 v94 Fi[2] Fp Fi[2] FC7{ BC8{ BC9{ BC10{ m Fp Fi[2]}}}} FC7 FC11{ m} FC7 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 Fi:1 Fi:1 Fi:1 FC12{ BC13{ BC10}} FC14{ BC15{ BC10}} FC16{ BC17{ BC10}} FC8 Fi[3]} vd v115 v116 v117 v118 FC6 Fi:1 FC18{ BC19{ BC10}}} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fi:1}


 S207C2_nt ::~S207C2_nt(){ note_dtor("S207C2_nt", this);}
void  S207C2_nt ::v114(){vfunc_called(this, "_ZN9S207C2_nt4v114Ev");}
void  S207C2_nt ::v115(){vfunc_called(this, "_ZN9S207C2_nt4v115Ev");}
void  S207C2_nt ::v116(){vfunc_called(this, "_ZN9S207C2_nt4v116Ev");}
void  S207C2_nt ::v117(){vfunc_called(this, "_ZN9S207C2_nt4v117Ev");}
void  S207C2_nt ::v118(){vfunc_called(this, "_ZN9S207C2_nt4v118Ev");}
void  S207C2_nt ::v119(){vfunc_called(this, "_ZN9S207C2_nt4v119Ev");}
void  S207C2_nt ::v120(){vfunc_called(this, "_ZN9S207C2_nt4v120Ev");}
void  S207C2_nt ::v121(){vfunc_called(this, "_ZN9S207C2_nt4v121Ev");}
S207C2_nt ::S207C2_nt(){ note_ctor("S207C2_nt", this);} // tgen

//skip512 S207C2_nt

#else // __cplusplus

extern void _ZN9S207C2_ntC1Ev();
extern void _ZN9S207C2_ntD1Ev();
Name_Map name_map_S207C2_nt[] = {
  NSPAIR(_ZN9S207C2_ntC1Ev),
  NSPAIR(_ZN9S207C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S207C6;
extern VTBL_ENTRY _ZTI6S207C6[];
extern  VTBL_ENTRY _ZTV6S207C6[];
extern Class_Descriptor cd_S207C5;
extern VTBL_ENTRY _ZTI6S207C5[];
extern  VTBL_ENTRY _ZTV6S207C5[];
extern Class_Descriptor cd_S207C4;
extern VTBL_ENTRY _ZTI6S207C4[];
extern  VTBL_ENTRY _ZTV6S207C4[];
extern Class_Descriptor cd_S207C3;
extern VTBL_ENTRY _ZTI6S207C3[];
extern  VTBL_ENTRY _ZTV6S207C3[];
static Base_Class bases_S207C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S207C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S207C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S207C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S207C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S207C2_nt[];
extern void _ZN9S207C2_ntD1Ev();
extern void _ZN9S207C2_ntD0Ev();
extern void _ZN6S207C62v4Ev();
extern void _ZN6S207C62v5Ev();
extern void _ZN6S207C62v6Ev();
extern void _ZN6S207C62v7Ev();
extern void _ZN6S207C62v8Ev();
extern void _ZN6S207C62v9Ev();
extern void _ZN6S207C63v10Ev();
extern void _ZN6S207C63v11Ev();
extern void _ZN6S207C63v12Ev();
extern void _ZN6S207C63v13Ev();
extern void _ZN6S207C63v14Ev();
extern void _ZN6S207C63v15Ev();
extern void _ZN6S207C63v16Ev();
extern void _ZN6S207C63v17Ev();
extern void _ZN6S207C63v18Ev();
extern void _ZN6S207C63v19Ev();
extern void _ZN6S207C63v20Ev();
extern void _ZN6S207C63v21Ev();
extern void _ZN6S207C63v22Ev();
extern void _ZN6S207C63v23Ev();
extern void _ZN6S207C63v24Ev();
extern void _ZN6S207C63v25Ev();
extern void _ZN6S207C63v26Ev();
extern void _ZN6S207C63v27Ev();
extern void _ZN6S207C63v28Ev();
extern void _ZN6S207C63v29Ev();
extern void _ZN6S207C63v30Ev();
extern void _ZN6S207C63v31Ev();
extern void _ZN6S207C63v32Ev();
extern void _ZN6S207C63v33Ev();
extern void _ZN6S207C63v34Ev();
extern void _ZN6S207C63v35Ev();
extern void _ZN6S207C63v36Ev();
extern void _ZN6S207C63v37Ev();
extern void _ZN6S207C63v38Ev();
extern void _ZN6S207C63v39Ev();
extern void _ZN6S207C63v40Ev();
extern void _ZN6S207C63v41Ev();
extern void _ZN6S207C63v42Ev();
extern void _ZN6S207C63v43Ev();
extern void _ZN6S207C63v44Ev();
extern void _ZN6S207C63v45Ev();
extern void _ZN6S207C63v46Ev();
extern void _ZN6S207C63v47Ev();
extern void _ZN6S207C63v48Ev();
extern void _ZN6S207C63v49Ev();
extern void _ZN6S207C63v50Ev();
extern void _ZN6S207C63v51Ev();
extern void _ZN6S207C63v52Ev();
extern void _ZN6S207C63v53Ev();
extern void _ZN6S207C63v54Ev();
extern void _ZN6S207C63v55Ev();
extern void _ZN6S207C63v56Ev();
extern void _ZN6S207C63v57Ev();
extern void _ZN6S207C63v58Ev();
extern void _ZN6S207C63v59Ev();
extern void _ZN6S207C63v60Ev();
extern void _ZN6S207C63v61Ev();
extern void _ZN6S207C63v62Ev();
extern void _ZN6S207C63v63Ev();
extern void _ZN6S207C63v64Ev();
extern void _ZN6S207C63v65Ev();
extern void _ZN6S207C63v66Ev();
extern void _ZN6S207C63v67Ev();
extern void _ZN6S207C53v68Ev();
extern void _ZN6S207C53v69Ev();
extern void _ZN6S207C53v70Ev();
extern void _ZN6S207C53v71Ev();
extern void _ZN6S207C53v72Ev();
extern void _ZN6S207C53v73Ev();
extern void _ZN6S207C53v74Ev();
extern void _ZN6S207C53v75Ev();
extern void _ZN6S207C53v76Ev();
extern void _ZN6S207C53v77Ev();
extern void _ZN6S207C53v78Ev();
extern void _ZN6S207C53v79Ev();
extern void _ZN6S207C53v80Ev();
extern void _ZN6S207C53v81Ev();
extern void _ZN6S207C53v82Ev();
extern void _ZN6S207C53v83Ev();
extern void _ZN6S207C53v84Ev();
extern void _ZN6S207C53v85Ev();
extern void _ZN6S207C53v86Ev();
extern void _ZN6S207C53v87Ev();
extern void _ZN6S207C53v88Ev();
extern void _ZN6S207C53v89Ev();
extern void _ZN6S207C43v90Ev();
extern void _ZN6S207C43v91Ev();
extern void _ZN6S207C43v92Ev();
extern void _ZN6S207C43v93Ev();
extern void _ZN6S207C43v94Ev();
extern void _ZN6S207C43v95Ev();
extern void _ZN6S207C43v96Ev();
extern void _ZN6S207C43v97Ev();
extern void _ZN6S207C43v98Ev();
extern void _ZN6S207C43v99Ev();
extern void _ZN6S207C44v100Ev();
extern void _ZN6S207C44v101Ev();
extern void _ZN6S207C44v102Ev();
extern void _ZN6S207C44v103Ev();
extern void _ZN6S207C44v104Ev();
extern void _ZN6S207C44v105Ev();
extern void _ZN6S207C44v106Ev();
extern void _ZN6S207C44v107Ev();
extern void _ZN6S207C44v108Ev();
extern void _ZN6S207C44v109Ev();
extern void _ZN6S207C34v110Ev();
extern void _ZN6S207C34v111Ev();
extern void _ZN6S207C34v112Ev();
extern void _ZN6S207C34v113Ev();
extern void _ZN9S207C2_nt4v114Ev();
extern void _ZN9S207C2_nt4v115Ev();
extern void _ZN9S207C2_nt4v116Ev();
extern void _ZN9S207C2_nt4v117Ev();
extern void _ZN9S207C2_nt4v118Ev();
extern void _ZN9S207C2_nt4v119Ev();
extern void _ZN9S207C2_nt4v120Ev();
extern void _ZN9S207C2_nt4v121Ev();
static  VTBL_ENTRY vtc_S207C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S207C2_nt[0]),
  (VTBL_ENTRY)&_ZN9S207C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN9S207C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN6S207C62v4Ev,
  (VTBL_ENTRY)&_ZN6S207C62v5Ev,
  (VTBL_ENTRY)&_ZN6S207C62v6Ev,
  (VTBL_ENTRY)&_ZN6S207C62v7Ev,
  (VTBL_ENTRY)&_ZN6S207C62v8Ev,
  (VTBL_ENTRY)&_ZN6S207C62v9Ev,
  (VTBL_ENTRY)&_ZN6S207C63v10Ev,
  (VTBL_ENTRY)&_ZN6S207C63v11Ev,
  (VTBL_ENTRY)&_ZN6S207C63v12Ev,
  (VTBL_ENTRY)&_ZN6S207C63v13Ev,
  (VTBL_ENTRY)&_ZN6S207C63v14Ev,
  (VTBL_ENTRY)&_ZN6S207C63v15Ev,
  (VTBL_ENTRY)&_ZN6S207C63v16Ev,
  (VTBL_ENTRY)&_ZN6S207C63v17Ev,
  (VTBL_ENTRY)&_ZN6S207C63v18Ev,
  (VTBL_ENTRY)&_ZN6S207C63v19Ev,
  (VTBL_ENTRY)&_ZN6S207C63v20Ev,
  (VTBL_ENTRY)&_ZN6S207C63v21Ev,
  (VTBL_ENTRY)&_ZN6S207C63v22Ev,
  (VTBL_ENTRY)&_ZN6S207C63v23Ev,
  (VTBL_ENTRY)&_ZN6S207C63v24Ev,
  (VTBL_ENTRY)&_ZN6S207C63v25Ev,
  (VTBL_ENTRY)&_ZN6S207C63v26Ev,
  (VTBL_ENTRY)&_ZN6S207C63v27Ev,
  (VTBL_ENTRY)&_ZN6S207C63v28Ev,
  (VTBL_ENTRY)&_ZN6S207C63v29Ev,
  (VTBL_ENTRY)&_ZN6S207C63v30Ev,
  (VTBL_ENTRY)&_ZN6S207C63v31Ev,
  (VTBL_ENTRY)&_ZN6S207C63v32Ev,
  (VTBL_ENTRY)&_ZN6S207C63v33Ev,
  (VTBL_ENTRY)&_ZN6S207C63v34Ev,
  (VTBL_ENTRY)&_ZN6S207C63v35Ev,
  (VTBL_ENTRY)&_ZN6S207C63v36Ev,
  (VTBL_ENTRY)&_ZN6S207C63v37Ev,
  (VTBL_ENTRY)&_ZN6S207C63v38Ev,
  (VTBL_ENTRY)&_ZN6S207C63v39Ev,
  (VTBL_ENTRY)&_ZN6S207C63v40Ev,
  (VTBL_ENTRY)&_ZN6S207C63v41Ev,
  (VTBL_ENTRY)&_ZN6S207C63v42Ev,
  (VTBL_ENTRY)&_ZN6S207C63v43Ev,
  (VTBL_ENTRY)&_ZN6S207C63v44Ev,
  (VTBL_ENTRY)&_ZN6S207C63v45Ev,
  (VTBL_ENTRY)&_ZN6S207C63v46Ev,
  (VTBL_ENTRY)&_ZN6S207C63v47Ev,
  (VTBL_ENTRY)&_ZN6S207C63v48Ev,
  (VTBL_ENTRY)&_ZN6S207C63v49Ev,
  (VTBL_ENTRY)&_ZN6S207C63v50Ev,
  (VTBL_ENTRY)&_ZN6S207C63v51Ev,
  (VTBL_ENTRY)&_ZN6S207C63v52Ev,
  (VTBL_ENTRY)&_ZN6S207C63v53Ev,
  (VTBL_ENTRY)&_ZN6S207C63v54Ev,
  (VTBL_ENTRY)&_ZN6S207C63v55Ev,
  (VTBL_ENTRY)&_ZN6S207C63v56Ev,
  (VTBL_ENTRY)&_ZN6S207C63v57Ev,
  (VTBL_ENTRY)&_ZN6S207C63v58Ev,
  (VTBL_ENTRY)&_ZN6S207C63v59Ev,
  (VTBL_ENTRY)&_ZN6S207C63v60Ev,
  (VTBL_ENTRY)&_ZN6S207C63v61Ev,
  (VTBL_ENTRY)&_ZN6S207C63v62Ev,
  (VTBL_ENTRY)&_ZN6S207C63v63Ev,
  (VTBL_ENTRY)&_ZN6S207C63v64Ev,
  (VTBL_ENTRY)&_ZN6S207C63v65Ev,
  (VTBL_ENTRY)&_ZN6S207C63v66Ev,
  (VTBL_ENTRY)&_ZN6S207C63v67Ev,
  (VTBL_ENTRY)&_ZN6S207C53v68Ev,
  (VTBL_ENTRY)&_ZN6S207C53v69Ev,
  (VTBL_ENTRY)&_ZN6S207C53v70Ev,
  (VTBL_ENTRY)&_ZN6S207C53v71Ev,
  (VTBL_ENTRY)&_ZN6S207C53v72Ev,
  (VTBL_ENTRY)&_ZN6S207C53v73Ev,
  (VTBL_ENTRY)&_ZN6S207C53v74Ev,
  (VTBL_ENTRY)&_ZN6S207C53v75Ev,
  (VTBL_ENTRY)&_ZN6S207C53v76Ev,
  (VTBL_ENTRY)&_ZN6S207C53v77Ev,
  (VTBL_ENTRY)&_ZN6S207C53v78Ev,
  (VTBL_ENTRY)&_ZN6S207C53v79Ev,
  (VTBL_ENTRY)&_ZN6S207C53v80Ev,
  (VTBL_ENTRY)&_ZN6S207C53v81Ev,
  (VTBL_ENTRY)&_ZN6S207C53v82Ev,
  (VTBL_ENTRY)&_ZN6S207C53v83Ev,
  (VTBL_ENTRY)&_ZN6S207C53v84Ev,
  (VTBL_ENTRY)&_ZN6S207C53v85Ev,
  (VTBL_ENTRY)&_ZN6S207C53v86Ev,
  (VTBL_ENTRY)&_ZN6S207C53v87Ev,
  (VTBL_ENTRY)&_ZN6S207C53v88Ev,
  (VTBL_ENTRY)&_ZN6S207C53v89Ev,
  (VTBL_ENTRY)&_ZN6S207C43v90Ev,
  (VTBL_ENTRY)&_ZN6S207C43v91Ev,
  (VTBL_ENTRY)&_ZN6S207C43v92Ev,
  (VTBL_ENTRY)&_ZN6S207C43v93Ev,
  (VTBL_ENTRY)&_ZN6S207C43v94Ev,
  (VTBL_ENTRY)&_ZN6S207C43v95Ev,
  (VTBL_ENTRY)&_ZN6S207C43v96Ev,
  (VTBL_ENTRY)&_ZN6S207C43v97Ev,
  (VTBL_ENTRY)&_ZN6S207C43v98Ev,
  (VTBL_ENTRY)&_ZN6S207C43v99Ev,
  (VTBL_ENTRY)&_ZN6S207C44v100Ev,
  (VTBL_ENTRY)&_ZN6S207C44v101Ev,
  (VTBL_ENTRY)&_ZN6S207C44v102Ev,
  (VTBL_ENTRY)&_ZN6S207C44v103Ev,
  (VTBL_ENTRY)&_ZN6S207C44v104Ev,
  (VTBL_ENTRY)&_ZN6S207C44v105Ev,
  (VTBL_ENTRY)&_ZN6S207C44v106Ev,
  (VTBL_ENTRY)&_ZN6S207C44v107Ev,
  (VTBL_ENTRY)&_ZN6S207C44v108Ev,
  (VTBL_ENTRY)&_ZN6S207C44v109Ev,
  (VTBL_ENTRY)&_ZN6S207C34v110Ev,
  (VTBL_ENTRY)&_ZN6S207C34v111Ev,
  (VTBL_ENTRY)&_ZN6S207C34v112Ev,
  (VTBL_ENTRY)&_ZN6S207C34v113Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v121Ev,
};
extern VTBL_ENTRY _ZTI9S207C2_nt[];
VTBL_ENTRY *P__ZTI9S207C2_nt = _ZTI9S207C2_nt; 
extern  VTBL_ENTRY _ZTV9S207C2_nt[];
Class_Descriptor cd_S207C2_nt = {  "S207C2_nt", // class name
  bases_S207C2_nt, 4,
  &(vtc_S207C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(304,228), // object size
  NSPAIRA(_ZTI9S207C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S207C2_nt),122, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S207C1  : S207C2_nt {
  void *s207c1f0[2];
  virtual  ~S207C1(); // _ZN6S207C1D1Ev
  virtual void  v1(); // _ZN6S207C12v1Ev
  virtual void  v2(); // _ZN6S207C12v2Ev
  virtual void  v3(); // _ZN6S207C12v3Ev
  S207C1(); // tgen
};
//SIG(1 S207C1) C1{ BC2{ BC3{ BC4{ BC5{ BC6{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC7{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 Fi[2] Fp Fi[2] FC8{ BC9{ BC10{ BC11{ m Fp Fi[2]}}}} FC8 FC12{ m} FC8 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi[2]} vd v90 v91 v92 v93 v94 v95 v96 v97 v98 v99 v100 v101 v102 v103 v104 v105 v106 v107 v108 v109 Fi:1 Fi:1 Fi:1 FC13{ BC14{ BC11}} FC15{ BC16{ BC11}} FC17{ BC18{ BC11}} FC9 Fi[3]} vd v110 v111 v112 v113 FC7 Fi:1 FC19{ BC20{ BC11}}} vd v114 v115 v116 v117 v118 v119 v120 v121 Fi Fi:1} vd v1 v2 v3 Fp[2]}


 S207C1 ::~S207C1(){ note_dtor("S207C1", this);}
void  S207C1 ::v1(){vfunc_called(this, "_ZN6S207C12v1Ev");}
void  S207C1 ::v2(){vfunc_called(this, "_ZN6S207C12v2Ev");}
void  S207C1 ::v3(){vfunc_called(this, "_ZN6S207C12v3Ev");}
S207C1 ::S207C1(){ note_ctor("S207C1", this);} // tgen

static void Test_S207C1()
{
  extern Class_Descriptor cd_S207C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,60)];
    init_test(&cd_S207C1, buf);
    S207C1 *dp, &lv = *(dp=new (buf) S207C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,236), "sizeof(S207C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S207C1)");
    check_base_class_offset(lv, (S207C6*)(S207C5*)(S207C4*)(S207C3*)(S207C2_nt*), 0, "S207C1");
    check_base_class_offset(lv, (S207C5*)(S207C4*)(S207C3*)(S207C2_nt*), 0, "S207C1");
    check_base_class_offset(lv, (S207C4*)(S207C3*)(S207C2_nt*), 0, "S207C1");
    check_base_class_offset(lv, (S207C3*)(S207C2_nt*), 0, "S207C1");
    check_base_class_offset(lv, (S207C2_nt*), 0, "S207C1");
    check_field_offset(lv, s207c1f0, ABISELECT(304,228), "S207C1.s207c1f0");
    test_class_info(&lv, &cd_S207C1);
    dp->~S207C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS207C1(Test_S207C1, "S207C1", ABISELECT(320,236));

#else // __cplusplus

extern void _ZN6S207C1C1Ev();
extern void _ZN6S207C1D1Ev();
Name_Map name_map_S207C1[] = {
  NSPAIR(_ZN6S207C1C1Ev),
  NSPAIR(_ZN6S207C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S207C6;
extern VTBL_ENTRY _ZTI6S207C6[];
extern  VTBL_ENTRY _ZTV6S207C6[];
extern Class_Descriptor cd_S207C5;
extern VTBL_ENTRY _ZTI6S207C5[];
extern  VTBL_ENTRY _ZTV6S207C5[];
extern Class_Descriptor cd_S207C4;
extern VTBL_ENTRY _ZTI6S207C4[];
extern  VTBL_ENTRY _ZTV6S207C4[];
extern Class_Descriptor cd_S207C3;
extern VTBL_ENTRY _ZTI6S207C3[];
extern  VTBL_ENTRY _ZTV6S207C3[];
extern Class_Descriptor cd_S207C2_nt;
extern VTBL_ENTRY _ZTI9S207C2_nt[];
extern  VTBL_ENTRY _ZTV9S207C2_nt[];
static Base_Class bases_S207C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S207C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S207C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S207C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S207C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S207C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S207C1[];
extern void _ZN6S207C1D1Ev();
extern void _ZN6S207C1D0Ev();
extern void _ZN6S207C62v4Ev();
extern void _ZN6S207C62v5Ev();
extern void _ZN6S207C62v6Ev();
extern void _ZN6S207C62v7Ev();
extern void _ZN6S207C62v8Ev();
extern void _ZN6S207C62v9Ev();
extern void _ZN6S207C63v10Ev();
extern void _ZN6S207C63v11Ev();
extern void _ZN6S207C63v12Ev();
extern void _ZN6S207C63v13Ev();
extern void _ZN6S207C63v14Ev();
extern void _ZN6S207C63v15Ev();
extern void _ZN6S207C63v16Ev();
extern void _ZN6S207C63v17Ev();
extern void _ZN6S207C63v18Ev();
extern void _ZN6S207C63v19Ev();
extern void _ZN6S207C63v20Ev();
extern void _ZN6S207C63v21Ev();
extern void _ZN6S207C63v22Ev();
extern void _ZN6S207C63v23Ev();
extern void _ZN6S207C63v24Ev();
extern void _ZN6S207C63v25Ev();
extern void _ZN6S207C63v26Ev();
extern void _ZN6S207C63v27Ev();
extern void _ZN6S207C63v28Ev();
extern void _ZN6S207C63v29Ev();
extern void _ZN6S207C63v30Ev();
extern void _ZN6S207C63v31Ev();
extern void _ZN6S207C63v32Ev();
extern void _ZN6S207C63v33Ev();
extern void _ZN6S207C63v34Ev();
extern void _ZN6S207C63v35Ev();
extern void _ZN6S207C63v36Ev();
extern void _ZN6S207C63v37Ev();
extern void _ZN6S207C63v38Ev();
extern void _ZN6S207C63v39Ev();
extern void _ZN6S207C63v40Ev();
extern void _ZN6S207C63v41Ev();
extern void _ZN6S207C63v42Ev();
extern void _ZN6S207C63v43Ev();
extern void _ZN6S207C63v44Ev();
extern void _ZN6S207C63v45Ev();
extern void _ZN6S207C63v46Ev();
extern void _ZN6S207C63v47Ev();
extern void _ZN6S207C63v48Ev();
extern void _ZN6S207C63v49Ev();
extern void _ZN6S207C63v50Ev();
extern void _ZN6S207C63v51Ev();
extern void _ZN6S207C63v52Ev();
extern void _ZN6S207C63v53Ev();
extern void _ZN6S207C63v54Ev();
extern void _ZN6S207C63v55Ev();
extern void _ZN6S207C63v56Ev();
extern void _ZN6S207C63v57Ev();
extern void _ZN6S207C63v58Ev();
extern void _ZN6S207C63v59Ev();
extern void _ZN6S207C63v60Ev();
extern void _ZN6S207C63v61Ev();
extern void _ZN6S207C63v62Ev();
extern void _ZN6S207C63v63Ev();
extern void _ZN6S207C63v64Ev();
extern void _ZN6S207C63v65Ev();
extern void _ZN6S207C63v66Ev();
extern void _ZN6S207C63v67Ev();
extern void _ZN6S207C53v68Ev();
extern void _ZN6S207C53v69Ev();
extern void _ZN6S207C53v70Ev();
extern void _ZN6S207C53v71Ev();
extern void _ZN6S207C53v72Ev();
extern void _ZN6S207C53v73Ev();
extern void _ZN6S207C53v74Ev();
extern void _ZN6S207C53v75Ev();
extern void _ZN6S207C53v76Ev();
extern void _ZN6S207C53v77Ev();
extern void _ZN6S207C53v78Ev();
extern void _ZN6S207C53v79Ev();
extern void _ZN6S207C53v80Ev();
extern void _ZN6S207C53v81Ev();
extern void _ZN6S207C53v82Ev();
extern void _ZN6S207C53v83Ev();
extern void _ZN6S207C53v84Ev();
extern void _ZN6S207C53v85Ev();
extern void _ZN6S207C53v86Ev();
extern void _ZN6S207C53v87Ev();
extern void _ZN6S207C53v88Ev();
extern void _ZN6S207C53v89Ev();
extern void _ZN6S207C43v90Ev();
extern void _ZN6S207C43v91Ev();
extern void _ZN6S207C43v92Ev();
extern void _ZN6S207C43v93Ev();
extern void _ZN6S207C43v94Ev();
extern void _ZN6S207C43v95Ev();
extern void _ZN6S207C43v96Ev();
extern void _ZN6S207C43v97Ev();
extern void _ZN6S207C43v98Ev();
extern void _ZN6S207C43v99Ev();
extern void _ZN6S207C44v100Ev();
extern void _ZN6S207C44v101Ev();
extern void _ZN6S207C44v102Ev();
extern void _ZN6S207C44v103Ev();
extern void _ZN6S207C44v104Ev();
extern void _ZN6S207C44v105Ev();
extern void _ZN6S207C44v106Ev();
extern void _ZN6S207C44v107Ev();
extern void _ZN6S207C44v108Ev();
extern void _ZN6S207C44v109Ev();
extern void _ZN6S207C34v110Ev();
extern void _ZN6S207C34v111Ev();
extern void _ZN6S207C34v112Ev();
extern void _ZN6S207C34v113Ev();
extern void _ZN9S207C2_nt4v114Ev();
extern void _ZN9S207C2_nt4v115Ev();
extern void _ZN9S207C2_nt4v116Ev();
extern void _ZN9S207C2_nt4v117Ev();
extern void _ZN9S207C2_nt4v118Ev();
extern void _ZN9S207C2_nt4v119Ev();
extern void _ZN9S207C2_nt4v120Ev();
extern void _ZN9S207C2_nt4v121Ev();
extern void _ZN6S207C12v1Ev();
extern void _ZN6S207C12v2Ev();
extern void _ZN6S207C12v3Ev();
static  VTBL_ENTRY vtc_S207C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S207C1[0]),
  (VTBL_ENTRY)&_ZN6S207C1D1Ev,
  (VTBL_ENTRY)&_ZN6S207C1D0Ev,
  (VTBL_ENTRY)&_ZN6S207C62v4Ev,
  (VTBL_ENTRY)&_ZN6S207C62v5Ev,
  (VTBL_ENTRY)&_ZN6S207C62v6Ev,
  (VTBL_ENTRY)&_ZN6S207C62v7Ev,
  (VTBL_ENTRY)&_ZN6S207C62v8Ev,
  (VTBL_ENTRY)&_ZN6S207C62v9Ev,
  (VTBL_ENTRY)&_ZN6S207C63v10Ev,
  (VTBL_ENTRY)&_ZN6S207C63v11Ev,
  (VTBL_ENTRY)&_ZN6S207C63v12Ev,
  (VTBL_ENTRY)&_ZN6S207C63v13Ev,
  (VTBL_ENTRY)&_ZN6S207C63v14Ev,
  (VTBL_ENTRY)&_ZN6S207C63v15Ev,
  (VTBL_ENTRY)&_ZN6S207C63v16Ev,
  (VTBL_ENTRY)&_ZN6S207C63v17Ev,
  (VTBL_ENTRY)&_ZN6S207C63v18Ev,
  (VTBL_ENTRY)&_ZN6S207C63v19Ev,
  (VTBL_ENTRY)&_ZN6S207C63v20Ev,
  (VTBL_ENTRY)&_ZN6S207C63v21Ev,
  (VTBL_ENTRY)&_ZN6S207C63v22Ev,
  (VTBL_ENTRY)&_ZN6S207C63v23Ev,
  (VTBL_ENTRY)&_ZN6S207C63v24Ev,
  (VTBL_ENTRY)&_ZN6S207C63v25Ev,
  (VTBL_ENTRY)&_ZN6S207C63v26Ev,
  (VTBL_ENTRY)&_ZN6S207C63v27Ev,
  (VTBL_ENTRY)&_ZN6S207C63v28Ev,
  (VTBL_ENTRY)&_ZN6S207C63v29Ev,
  (VTBL_ENTRY)&_ZN6S207C63v30Ev,
  (VTBL_ENTRY)&_ZN6S207C63v31Ev,
  (VTBL_ENTRY)&_ZN6S207C63v32Ev,
  (VTBL_ENTRY)&_ZN6S207C63v33Ev,
  (VTBL_ENTRY)&_ZN6S207C63v34Ev,
  (VTBL_ENTRY)&_ZN6S207C63v35Ev,
  (VTBL_ENTRY)&_ZN6S207C63v36Ev,
  (VTBL_ENTRY)&_ZN6S207C63v37Ev,
  (VTBL_ENTRY)&_ZN6S207C63v38Ev,
  (VTBL_ENTRY)&_ZN6S207C63v39Ev,
  (VTBL_ENTRY)&_ZN6S207C63v40Ev,
  (VTBL_ENTRY)&_ZN6S207C63v41Ev,
  (VTBL_ENTRY)&_ZN6S207C63v42Ev,
  (VTBL_ENTRY)&_ZN6S207C63v43Ev,
  (VTBL_ENTRY)&_ZN6S207C63v44Ev,
  (VTBL_ENTRY)&_ZN6S207C63v45Ev,
  (VTBL_ENTRY)&_ZN6S207C63v46Ev,
  (VTBL_ENTRY)&_ZN6S207C63v47Ev,
  (VTBL_ENTRY)&_ZN6S207C63v48Ev,
  (VTBL_ENTRY)&_ZN6S207C63v49Ev,
  (VTBL_ENTRY)&_ZN6S207C63v50Ev,
  (VTBL_ENTRY)&_ZN6S207C63v51Ev,
  (VTBL_ENTRY)&_ZN6S207C63v52Ev,
  (VTBL_ENTRY)&_ZN6S207C63v53Ev,
  (VTBL_ENTRY)&_ZN6S207C63v54Ev,
  (VTBL_ENTRY)&_ZN6S207C63v55Ev,
  (VTBL_ENTRY)&_ZN6S207C63v56Ev,
  (VTBL_ENTRY)&_ZN6S207C63v57Ev,
  (VTBL_ENTRY)&_ZN6S207C63v58Ev,
  (VTBL_ENTRY)&_ZN6S207C63v59Ev,
  (VTBL_ENTRY)&_ZN6S207C63v60Ev,
  (VTBL_ENTRY)&_ZN6S207C63v61Ev,
  (VTBL_ENTRY)&_ZN6S207C63v62Ev,
  (VTBL_ENTRY)&_ZN6S207C63v63Ev,
  (VTBL_ENTRY)&_ZN6S207C63v64Ev,
  (VTBL_ENTRY)&_ZN6S207C63v65Ev,
  (VTBL_ENTRY)&_ZN6S207C63v66Ev,
  (VTBL_ENTRY)&_ZN6S207C63v67Ev,
  (VTBL_ENTRY)&_ZN6S207C53v68Ev,
  (VTBL_ENTRY)&_ZN6S207C53v69Ev,
  (VTBL_ENTRY)&_ZN6S207C53v70Ev,
  (VTBL_ENTRY)&_ZN6S207C53v71Ev,
  (VTBL_ENTRY)&_ZN6S207C53v72Ev,
  (VTBL_ENTRY)&_ZN6S207C53v73Ev,
  (VTBL_ENTRY)&_ZN6S207C53v74Ev,
  (VTBL_ENTRY)&_ZN6S207C53v75Ev,
  (VTBL_ENTRY)&_ZN6S207C53v76Ev,
  (VTBL_ENTRY)&_ZN6S207C53v77Ev,
  (VTBL_ENTRY)&_ZN6S207C53v78Ev,
  (VTBL_ENTRY)&_ZN6S207C53v79Ev,
  (VTBL_ENTRY)&_ZN6S207C53v80Ev,
  (VTBL_ENTRY)&_ZN6S207C53v81Ev,
  (VTBL_ENTRY)&_ZN6S207C53v82Ev,
  (VTBL_ENTRY)&_ZN6S207C53v83Ev,
  (VTBL_ENTRY)&_ZN6S207C53v84Ev,
  (VTBL_ENTRY)&_ZN6S207C53v85Ev,
  (VTBL_ENTRY)&_ZN6S207C53v86Ev,
  (VTBL_ENTRY)&_ZN6S207C53v87Ev,
  (VTBL_ENTRY)&_ZN6S207C53v88Ev,
  (VTBL_ENTRY)&_ZN6S207C53v89Ev,
  (VTBL_ENTRY)&_ZN6S207C43v90Ev,
  (VTBL_ENTRY)&_ZN6S207C43v91Ev,
  (VTBL_ENTRY)&_ZN6S207C43v92Ev,
  (VTBL_ENTRY)&_ZN6S207C43v93Ev,
  (VTBL_ENTRY)&_ZN6S207C43v94Ev,
  (VTBL_ENTRY)&_ZN6S207C43v95Ev,
  (VTBL_ENTRY)&_ZN6S207C43v96Ev,
  (VTBL_ENTRY)&_ZN6S207C43v97Ev,
  (VTBL_ENTRY)&_ZN6S207C43v98Ev,
  (VTBL_ENTRY)&_ZN6S207C43v99Ev,
  (VTBL_ENTRY)&_ZN6S207C44v100Ev,
  (VTBL_ENTRY)&_ZN6S207C44v101Ev,
  (VTBL_ENTRY)&_ZN6S207C44v102Ev,
  (VTBL_ENTRY)&_ZN6S207C44v103Ev,
  (VTBL_ENTRY)&_ZN6S207C44v104Ev,
  (VTBL_ENTRY)&_ZN6S207C44v105Ev,
  (VTBL_ENTRY)&_ZN6S207C44v106Ev,
  (VTBL_ENTRY)&_ZN6S207C44v107Ev,
  (VTBL_ENTRY)&_ZN6S207C44v108Ev,
  (VTBL_ENTRY)&_ZN6S207C44v109Ev,
  (VTBL_ENTRY)&_ZN6S207C34v110Ev,
  (VTBL_ENTRY)&_ZN6S207C34v111Ev,
  (VTBL_ENTRY)&_ZN6S207C34v112Ev,
  (VTBL_ENTRY)&_ZN6S207C34v113Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN9S207C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN6S207C12v1Ev,
  (VTBL_ENTRY)&_ZN6S207C12v2Ev,
  (VTBL_ENTRY)&_ZN6S207C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S207C1[];
extern  VTBL_ENTRY _ZTV6S207C1[];
Class_Descriptor cd_S207C1 = {  "S207C1", // class name
  bases_S207C1, 5,
  &(vtc_S207C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,236), // object size
  NSPAIRA(_ZTI6S207C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S207C1),125, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S664C5  {
  int s664c5f0;
  __tsi64 s664c5f1;
  void *s664c5f2[4];
  int s664c5f3[2];
  void *s664c5f4;
  ::S273C7_nt s664c5f5;
  void *s664c5f6[2];
  virtual  ~S664C5(); // _ZN6S664C5D1Ev
  virtual void  v6(); // _ZN6S664C52v6Ev
  virtual void  v7(); // _ZN6S664C52v7Ev
  virtual void  v8(); // _ZN6S664C52v8Ev
  virtual void  v9(); // _ZN6S664C52v9Ev
  virtual void  v10(); // _ZN6S664C53v10Ev
  virtual void  v11(); // _ZN6S664C53v11Ev
  virtual void  v12(); // _ZN6S664C53v12Ev
  virtual void  v13(); // _ZN6S664C53v13Ev
  virtual void  v14(); // _ZN6S664C53v14Ev
  virtual void  v15(); // _ZN6S664C53v15Ev
  virtual void  v16(); // _ZN6S664C53v16Ev
  virtual void  v17(); // _ZN6S664C53v17Ev
  virtual void  v18(); // _ZN6S664C53v18Ev
  virtual void  v19(); // _ZN6S664C53v19Ev
  virtual void  v20(); // _ZN6S664C53v20Ev
  virtual void  v21(); // _ZN6S664C53v21Ev
  virtual void  v22(); // _ZN6S664C53v22Ev
  virtual void  v23(); // _ZN6S664C53v23Ev
  virtual void  v24(); // _ZN6S664C53v24Ev
  virtual void  v25(); // _ZN6S664C53v25Ev
  virtual void  v26(); // _ZN6S664C53v26Ev
  virtual void  v27(); // _ZN6S664C53v27Ev
  virtual void  v28(); // _ZN6S664C53v28Ev
  virtual void  v29(); // _ZN6S664C53v29Ev
  virtual void  v30(); // _ZN6S664C53v30Ev
  virtual void  v31(); // _ZN6S664C53v31Ev
  virtual void  v32(); // _ZN6S664C53v32Ev
  virtual void  v33(); // _ZN6S664C53v33Ev
  virtual void  v34(); // _ZN6S664C53v34Ev
  virtual void  v35(); // _ZN6S664C53v35Ev
  virtual void  v36(); // _ZN6S664C53v36Ev
  virtual void  v37(); // _ZN6S664C53v37Ev
  virtual void  v38(); // _ZN6S664C53v38Ev
  virtual void  v39(); // _ZN6S664C53v39Ev
  virtual void  v40(); // _ZN6S664C53v40Ev
  virtual void  v41(); // _ZN6S664C53v41Ev
  virtual void  v42(); // _ZN6S664C53v42Ev
  virtual void  v43(); // _ZN6S664C53v43Ev
  virtual void  v44(); // _ZN6S664C53v44Ev
  virtual void  v45(); // _ZN6S664C53v45Ev
  virtual void  v46(); // _ZN6S664C53v46Ev
  virtual void  v47(); // _ZN6S664C53v47Ev
  virtual void  v48(); // _ZN6S664C53v48Ev
  virtual void  v49(); // _ZN6S664C53v49Ev
  virtual void  v50(); // _ZN6S664C53v50Ev
  virtual void  v51(); // _ZN6S664C53v51Ev
  virtual void  v52(); // _ZN6S664C53v52Ev
  virtual void  v53(); // _ZN6S664C53v53Ev
  virtual void  v54(); // _ZN6S664C53v54Ev
  virtual void  v55(); // _ZN6S664C53v55Ev
  virtual void  v56(); // _ZN6S664C53v56Ev
  virtual void  v57(); // _ZN6S664C53v57Ev
  virtual void  v58(); // _ZN6S664C53v58Ev
  virtual void  v59(); // _ZN6S664C53v59Ev
  virtual void  v60(); // _ZN6S664C53v60Ev
  virtual void  v61(); // _ZN6S664C53v61Ev
  virtual void  v62(); // _ZN6S664C53v62Ev
  virtual void  v63(); // _ZN6S664C53v63Ev
  virtual void  v64(); // _ZN6S664C53v64Ev
  virtual void  v65(); // _ZN6S664C53v65Ev
  virtual void  v66(); // _ZN6S664C53v66Ev
  virtual void  v67(); // _ZN6S664C53v67Ev
  virtual void  v68(); // _ZN6S664C53v68Ev
  virtual void  v69(); // _ZN6S664C53v69Ev
  S664C5(); // tgen
};
//SIG(-1 S664C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S664C5 ::~S664C5(){ note_dtor("S664C5", this);}
void  S664C5 ::v6(){vfunc_called(this, "_ZN6S664C52v6Ev");}
void  S664C5 ::v7(){vfunc_called(this, "_ZN6S664C52v7Ev");}
void  S664C5 ::v8(){vfunc_called(this, "_ZN6S664C52v8Ev");}
void  S664C5 ::v9(){vfunc_called(this, "_ZN6S664C52v9Ev");}
void  S664C5 ::v10(){vfunc_called(this, "_ZN6S664C53v10Ev");}
void  S664C5 ::v11(){vfunc_called(this, "_ZN6S664C53v11Ev");}
void  S664C5 ::v12(){vfunc_called(this, "_ZN6S664C53v12Ev");}
void  S664C5 ::v13(){vfunc_called(this, "_ZN6S664C53v13Ev");}
void  S664C5 ::v14(){vfunc_called(this, "_ZN6S664C53v14Ev");}
void  S664C5 ::v15(){vfunc_called(this, "_ZN6S664C53v15Ev");}
void  S664C5 ::v16(){vfunc_called(this, "_ZN6S664C53v16Ev");}
void  S664C5 ::v17(){vfunc_called(this, "_ZN6S664C53v17Ev");}
void  S664C5 ::v18(){vfunc_called(this, "_ZN6S664C53v18Ev");}
void  S664C5 ::v19(){vfunc_called(this, "_ZN6S664C53v19Ev");}
void  S664C5 ::v20(){vfunc_called(this, "_ZN6S664C53v20Ev");}
void  S664C5 ::v21(){vfunc_called(this, "_ZN6S664C53v21Ev");}
void  S664C5 ::v22(){vfunc_called(this, "_ZN6S664C53v22Ev");}
void  S664C5 ::v23(){vfunc_called(this, "_ZN6S664C53v23Ev");}
void  S664C5 ::v24(){vfunc_called(this, "_ZN6S664C53v24Ev");}
void  S664C5 ::v25(){vfunc_called(this, "_ZN6S664C53v25Ev");}
void  S664C5 ::v26(){vfunc_called(this, "_ZN6S664C53v26Ev");}
void  S664C5 ::v27(){vfunc_called(this, "_ZN6S664C53v27Ev");}
void  S664C5 ::v28(){vfunc_called(this, "_ZN6S664C53v28Ev");}
void  S664C5 ::v29(){vfunc_called(this, "_ZN6S664C53v29Ev");}
void  S664C5 ::v30(){vfunc_called(this, "_ZN6S664C53v30Ev");}
void  S664C5 ::v31(){vfunc_called(this, "_ZN6S664C53v31Ev");}
void  S664C5 ::v32(){vfunc_called(this, "_ZN6S664C53v32Ev");}
void  S664C5 ::v33(){vfunc_called(this, "_ZN6S664C53v33Ev");}
void  S664C5 ::v34(){vfunc_called(this, "_ZN6S664C53v34Ev");}
void  S664C5 ::v35(){vfunc_called(this, "_ZN6S664C53v35Ev");}
void  S664C5 ::v36(){vfunc_called(this, "_ZN6S664C53v36Ev");}
void  S664C5 ::v37(){vfunc_called(this, "_ZN6S664C53v37Ev");}
void  S664C5 ::v38(){vfunc_called(this, "_ZN6S664C53v38Ev");}
void  S664C5 ::v39(){vfunc_called(this, "_ZN6S664C53v39Ev");}
void  S664C5 ::v40(){vfunc_called(this, "_ZN6S664C53v40Ev");}
void  S664C5 ::v41(){vfunc_called(this, "_ZN6S664C53v41Ev");}
void  S664C5 ::v42(){vfunc_called(this, "_ZN6S664C53v42Ev");}
void  S664C5 ::v43(){vfunc_called(this, "_ZN6S664C53v43Ev");}
void  S664C5 ::v44(){vfunc_called(this, "_ZN6S664C53v44Ev");}
void  S664C5 ::v45(){vfunc_called(this, "_ZN6S664C53v45Ev");}
void  S664C5 ::v46(){vfunc_called(this, "_ZN6S664C53v46Ev");}
void  S664C5 ::v47(){vfunc_called(this, "_ZN6S664C53v47Ev");}
void  S664C5 ::v48(){vfunc_called(this, "_ZN6S664C53v48Ev");}
void  S664C5 ::v49(){vfunc_called(this, "_ZN6S664C53v49Ev");}
void  S664C5 ::v50(){vfunc_called(this, "_ZN6S664C53v50Ev");}
void  S664C5 ::v51(){vfunc_called(this, "_ZN6S664C53v51Ev");}
void  S664C5 ::v52(){vfunc_called(this, "_ZN6S664C53v52Ev");}
void  S664C5 ::v53(){vfunc_called(this, "_ZN6S664C53v53Ev");}
void  S664C5 ::v54(){vfunc_called(this, "_ZN6S664C53v54Ev");}
void  S664C5 ::v55(){vfunc_called(this, "_ZN6S664C53v55Ev");}
void  S664C5 ::v56(){vfunc_called(this, "_ZN6S664C53v56Ev");}
void  S664C5 ::v57(){vfunc_called(this, "_ZN6S664C53v57Ev");}
void  S664C5 ::v58(){vfunc_called(this, "_ZN6S664C53v58Ev");}
void  S664C5 ::v59(){vfunc_called(this, "_ZN6S664C53v59Ev");}
void  S664C5 ::v60(){vfunc_called(this, "_ZN6S664C53v60Ev");}
void  S664C5 ::v61(){vfunc_called(this, "_ZN6S664C53v61Ev");}
void  S664C5 ::v62(){vfunc_called(this, "_ZN6S664C53v62Ev");}
void  S664C5 ::v63(){vfunc_called(this, "_ZN6S664C53v63Ev");}
void  S664C5 ::v64(){vfunc_called(this, "_ZN6S664C53v64Ev");}
void  S664C5 ::v65(){vfunc_called(this, "_ZN6S664C53v65Ev");}
void  S664C5 ::v66(){vfunc_called(this, "_ZN6S664C53v66Ev");}
void  S664C5 ::v67(){vfunc_called(this, "_ZN6S664C53v67Ev");}
void  S664C5 ::v68(){vfunc_called(this, "_ZN6S664C53v68Ev");}
void  S664C5 ::v69(){vfunc_called(this, "_ZN6S664C53v69Ev");}
S664C5 ::S664C5(){ note_ctor("S664C5", this);} // tgen

static void Test_S664C5()
{
  extern Class_Descriptor cd_S664C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S664C5, buf);
    S664C5 *dp, &lv = *(dp=new (buf) S664C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S664C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S664C5)");
    check_field_offset(lv, s664c5f0, ABISELECT(8,4), "S664C5.s664c5f0");
    check_field_offset(lv, s664c5f1, ABISELECT(16,8), "S664C5.s664c5f1");
    check_field_offset(lv, s664c5f2, ABISELECT(24,16), "S664C5.s664c5f2");
    check_field_offset(lv, s664c5f3, ABISELECT(56,32), "S664C5.s664c5f3");
    check_field_offset(lv, s664c5f4, ABISELECT(64,40), "S664C5.s664c5f4");
    check_field_offset(lv, s664c5f5, ABISELECT(72,44), "S664C5.s664c5f5");
    check_field_offset(lv, s664c5f6, ABISELECT(80,52), "S664C5.s664c5f6");
    test_class_info(&lv, &cd_S664C5);
    dp->~S664C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS664C5(Test_S664C5, "S664C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S664C5C1Ev();
extern void _ZN6S664C5D1Ev();
Name_Map name_map_S664C5[] = {
  NSPAIR(_ZN6S664C5C1Ev),
  NSPAIR(_ZN6S664C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S664C5[];
extern void _ZN6S664C5D1Ev();
extern void _ZN6S664C5D0Ev();
extern void _ZN6S664C52v6Ev();
extern void _ZN6S664C52v7Ev();
extern void _ZN6S664C52v8Ev();
extern void _ZN6S664C52v9Ev();
extern void _ZN6S664C53v10Ev();
extern void _ZN6S664C53v11Ev();
extern void _ZN6S664C53v12Ev();
extern void _ZN6S664C53v13Ev();
extern void _ZN6S664C53v14Ev();
extern void _ZN6S664C53v15Ev();
extern void _ZN6S664C53v16Ev();
extern void _ZN6S664C53v17Ev();
extern void _ZN6S664C53v18Ev();
extern void _ZN6S664C53v19Ev();
extern void _ZN6S664C53v20Ev();
extern void _ZN6S664C53v21Ev();
extern void _ZN6S664C53v22Ev();
extern void _ZN6S664C53v23Ev();
extern void _ZN6S664C53v24Ev();
extern void _ZN6S664C53v25Ev();
extern void _ZN6S664C53v26Ev();
extern void _ZN6S664C53v27Ev();
extern void _ZN6S664C53v28Ev();
extern void _ZN6S664C53v29Ev();
extern void _ZN6S664C53v30Ev();
extern void _ZN6S664C53v31Ev();
extern void _ZN6S664C53v32Ev();
extern void _ZN6S664C53v33Ev();
extern void _ZN6S664C53v34Ev();
extern void _ZN6S664C53v35Ev();
extern void _ZN6S664C53v36Ev();
extern void _ZN6S664C53v37Ev();
extern void _ZN6S664C53v38Ev();
extern void _ZN6S664C53v39Ev();
extern void _ZN6S664C53v40Ev();
extern void _ZN6S664C53v41Ev();
extern void _ZN6S664C53v42Ev();
extern void _ZN6S664C53v43Ev();
extern void _ZN6S664C53v44Ev();
extern void _ZN6S664C53v45Ev();
extern void _ZN6S664C53v46Ev();
extern void _ZN6S664C53v47Ev();
extern void _ZN6S664C53v48Ev();
extern void _ZN6S664C53v49Ev();
extern void _ZN6S664C53v50Ev();
extern void _ZN6S664C53v51Ev();
extern void _ZN6S664C53v52Ev();
extern void _ZN6S664C53v53Ev();
extern void _ZN6S664C53v54Ev();
extern void _ZN6S664C53v55Ev();
extern void _ZN6S664C53v56Ev();
extern void _ZN6S664C53v57Ev();
extern void _ZN6S664C53v58Ev();
extern void _ZN6S664C53v59Ev();
extern void _ZN6S664C53v60Ev();
extern void _ZN6S664C53v61Ev();
extern void _ZN6S664C53v62Ev();
extern void _ZN6S664C53v63Ev();
extern void _ZN6S664C53v64Ev();
extern void _ZN6S664C53v65Ev();
extern void _ZN6S664C53v66Ev();
extern void _ZN6S664C53v67Ev();
extern void _ZN6S664C53v68Ev();
extern void _ZN6S664C53v69Ev();
static  VTBL_ENTRY vtc_S664C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S664C5[0]),
  (VTBL_ENTRY)&_ZN6S664C5D1Ev,
  (VTBL_ENTRY)&_ZN6S664C5D0Ev,
  (VTBL_ENTRY)&_ZN6S664C52v6Ev,
  (VTBL_ENTRY)&_ZN6S664C52v7Ev,
  (VTBL_ENTRY)&_ZN6S664C52v8Ev,
  (VTBL_ENTRY)&_ZN6S664C52v9Ev,
  (VTBL_ENTRY)&_ZN6S664C53v10Ev,
  (VTBL_ENTRY)&_ZN6S664C53v11Ev,
  (VTBL_ENTRY)&_ZN6S664C53v12Ev,
  (VTBL_ENTRY)&_ZN6S664C53v13Ev,
  (VTBL_ENTRY)&_ZN6S664C53v14Ev,
  (VTBL_ENTRY)&_ZN6S664C53v15Ev,
  (VTBL_ENTRY)&_ZN6S664C53v16Ev,
  (VTBL_ENTRY)&_ZN6S664C53v17Ev,
  (VTBL_ENTRY)&_ZN6S664C53v18Ev,
  (VTBL_ENTRY)&_ZN6S664C53v19Ev,
  (VTBL_ENTRY)&_ZN6S664C53v20Ev,
  (VTBL_ENTRY)&_ZN6S664C53v21Ev,
  (VTBL_ENTRY)&_ZN6S664C53v22Ev,
  (VTBL_ENTRY)&_ZN6S664C53v23Ev,
  (VTBL_ENTRY)&_ZN6S664C53v24Ev,
  (VTBL_ENTRY)&_ZN6S664C53v25Ev,
  (VTBL_ENTRY)&_ZN6S664C53v26Ev,
  (VTBL_ENTRY)&_ZN6S664C53v27Ev,
  (VTBL_ENTRY)&_ZN6S664C53v28Ev,
  (VTBL_ENTRY)&_ZN6S664C53v29Ev,
  (VTBL_ENTRY)&_ZN6S664C53v30Ev,
  (VTBL_ENTRY)&_ZN6S664C53v31Ev,
  (VTBL_ENTRY)&_ZN6S664C53v32Ev,
  (VTBL_ENTRY)&_ZN6S664C53v33Ev,
  (VTBL_ENTRY)&_ZN6S664C53v34Ev,
  (VTBL_ENTRY)&_ZN6S664C53v35Ev,
  (VTBL_ENTRY)&_ZN6S664C53v36Ev,
  (VTBL_ENTRY)&_ZN6S664C53v37Ev,
  (VTBL_ENTRY)&_ZN6S664C53v38Ev,
  (VTBL_ENTRY)&_ZN6S664C53v39Ev,
  (VTBL_ENTRY)&_ZN6S664C53v40Ev,
  (VTBL_ENTRY)&_ZN6S664C53v41Ev,
  (VTBL_ENTRY)&_ZN6S664C53v42Ev,
  (VTBL_ENTRY)&_ZN6S664C53v43Ev,
  (VTBL_ENTRY)&_ZN6S664C53v44Ev,
  (VTBL_ENTRY)&_ZN6S664C53v45Ev,
  (VTBL_ENTRY)&_ZN6S664C53v46Ev,
  (VTBL_ENTRY)&_ZN6S664C53v47Ev,
  (VTBL_ENTRY)&_ZN6S664C53v48Ev,
  (VTBL_ENTRY)&_ZN6S664C53v49Ev,
  (VTBL_ENTRY)&_ZN6S664C53v50Ev,
  (VTBL_ENTRY)&_ZN6S664C53v51Ev,
  (VTBL_ENTRY)&_ZN6S664C53v52Ev,
  (VTBL_ENTRY)&_ZN6S664C53v53Ev,
  (VTBL_ENTRY)&_ZN6S664C53v54Ev,
  (VTBL_ENTRY)&_ZN6S664C53v55Ev,
  (VTBL_ENTRY)&_ZN6S664C53v56Ev,
  (VTBL_ENTRY)&_ZN6S664C53v57Ev,
  (VTBL_ENTRY)&_ZN6S664C53v58Ev,
  (VTBL_ENTRY)&_ZN6S664C53v59Ev,
  (VTBL_ENTRY)&_ZN6S664C53v60Ev,
  (VTBL_ENTRY)&_ZN6S664C53v61Ev,
  (VTBL_ENTRY)&_ZN6S664C53v62Ev,
  (VTBL_ENTRY)&_ZN6S664C53v63Ev,
  (VTBL_ENTRY)&_ZN6S664C53v64Ev,
  (VTBL_ENTRY)&_ZN6S664C53v65Ev,
  (VTBL_ENTRY)&_ZN6S664C53v66Ev,
  (VTBL_ENTRY)&_ZN6S664C53v67Ev,
  (VTBL_ENTRY)&_ZN6S664C53v68Ev,
  (VTBL_ENTRY)&_ZN6S664C53v69Ev,
};
extern VTBL_ENTRY _ZTI6S664C5[];
extern  VTBL_ENTRY _ZTV6S664C5[];
Class_Descriptor cd_S664C5 = {  "S664C5", // class name
  0,0,//no base classes
  &(vtc_S664C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S664C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S664C5),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S664C4  : S664C5 {
  void *s664c4f0;
  ::S273C7_nt s664c4f1;
  int s664c4f2[5];
  unsigned int s664c4f3:1;
  unsigned int s664c4f4:1;
  unsigned int s664c4f5:1;
  unsigned int s664c4f6:1;
  unsigned int s664c4f7:1;
  ::S273C21 s664c4f8;
  ::S273C17 s664c4f9;
  unsigned int s664c4f10:1;
  int s664c4f11[2];
  void *s664c4f12;
  int s664c4f13[3];
  virtual  ~S664C4(); // _ZN6S664C4D1Ev
  virtual void  v70(); // _ZN6S664C43v70Ev
  virtual void  v71(); // _ZN6S664C43v71Ev
  virtual void  v72(); // _ZN6S664C43v72Ev
  virtual void  v73(); // _ZN6S664C43v73Ev
  virtual void  v74(); // _ZN6S664C43v74Ev
  virtual void  v75(); // _ZN6S664C43v75Ev
  virtual void  v76(); // _ZN6S664C43v76Ev
  virtual void  v77(); // _ZN6S664C43v77Ev
  virtual void  v78(); // _ZN6S664C43v78Ev
  virtual void  v79(); // _ZN6S664C43v79Ev
  virtual void  v80(); // _ZN6S664C43v80Ev
  virtual void  v81(); // _ZN6S664C43v81Ev
  virtual void  v82(); // _ZN6S664C43v82Ev
  S664C4(); // tgen
};
//SIG(-1 S664C4) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S664C4 ::~S664C4(){ note_dtor("S664C4", this);}
void  S664C4 ::v70(){vfunc_called(this, "_ZN6S664C43v70Ev");}
void  S664C4 ::v71(){vfunc_called(this, "_ZN6S664C43v71Ev");}
void  S664C4 ::v72(){vfunc_called(this, "_ZN6S664C43v72Ev");}
void  S664C4 ::v73(){vfunc_called(this, "_ZN6S664C43v73Ev");}
void  S664C4 ::v74(){vfunc_called(this, "_ZN6S664C43v74Ev");}
void  S664C4 ::v75(){vfunc_called(this, "_ZN6S664C43v75Ev");}
void  S664C4 ::v76(){vfunc_called(this, "_ZN6S664C43v76Ev");}
void  S664C4 ::v77(){vfunc_called(this, "_ZN6S664C43v77Ev");}
void  S664C4 ::v78(){vfunc_called(this, "_ZN6S664C43v78Ev");}
void  S664C4 ::v79(){vfunc_called(this, "_ZN6S664C43v79Ev");}
void  S664C4 ::v80(){vfunc_called(this, "_ZN6S664C43v80Ev");}
void  S664C4 ::v81(){vfunc_called(this, "_ZN6S664C43v81Ev");}
void  S664C4 ::v82(){vfunc_called(this, "_ZN6S664C43v82Ev");}
S664C4 ::S664C4(){ note_ctor("S664C4", this);} // tgen

static void Test_S664C4()
{
  extern Class_Descriptor cd_S664C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S664C4, buf);
    S664C4 *dp, &lv = *(dp=new (buf) S664C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S664C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S664C4)");
    check_base_class_offset(lv, (S664C5*), 0, "S664C4");
    check_field_offset(lv, s664c4f0, ABISELECT(96,60), "S664C4.s664c4f0");
    check_field_offset(lv, s664c4f1, ABISELECT(104,64), "S664C4.s664c4f1");
    check_field_offset(lv, s664c4f2, ABISELECT(112,72), "S664C4.s664c4f2");
    set_bf_and_test(lv, s664c4f3, ABISELECT(132,92), 0, 1, 1, "S664C4");
    set_bf_and_test(lv, s664c4f4, ABISELECT(132,92), 1, 1, 1, "S664C4");
    set_bf_and_test(lv, s664c4f5, ABISELECT(132,92), 2, 1, 1, "S664C4");
    set_bf_and_test(lv, s664c4f6, ABISELECT(132,92), 3, 1, 1, "S664C4");
    set_bf_and_test(lv, s664c4f7, ABISELECT(132,92), 4, 1, 1, "S664C4");
    check_field_offset(lv, s664c4f8, ABISELECT(136,96), "S664C4.s664c4f8");
    check_field_offset(lv, s664c4f9, ABISELECT(152,108), "S664C4.s664c4f9");
    set_bf_and_test(lv, s664c4f10, ABISELECT(168,120), 0, 1, 1, "S664C4");
    check_field_offset(lv, s664c4f11, ABISELECT(172,124), "S664C4.s664c4f11");
    check_field_offset(lv, s664c4f12, ABISELECT(184,132), "S664C4.s664c4f12");
    check_field_offset(lv, s664c4f13, ABISELECT(192,136), "S664C4.s664c4f13");
    test_class_info(&lv, &cd_S664C4);
    dp->~S664C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS664C4(Test_S664C4, "S664C4", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN6S664C4C1Ev();
extern void _ZN6S664C4D1Ev();
Name_Map name_map_S664C4[] = {
  NSPAIR(_ZN6S664C4C1Ev),
  NSPAIR(_ZN6S664C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S664C5;
extern VTBL_ENTRY _ZTI6S664C5[];
extern  VTBL_ENTRY _ZTV6S664C5[];
static Base_Class bases_S664C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S664C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S664C4[];
extern void _ZN6S664C4D1Ev();
extern void _ZN6S664C4D0Ev();
extern void _ZN6S664C52v6Ev();
extern void _ZN6S664C52v7Ev();
extern void _ZN6S664C52v8Ev();
extern void _ZN6S664C52v9Ev();
extern void _ZN6S664C53v10Ev();
extern void _ZN6S664C53v11Ev();
extern void _ZN6S664C53v12Ev();
extern void _ZN6S664C53v13Ev();
extern void _ZN6S664C53v14Ev();
extern void _ZN6S664C53v15Ev();
extern void _ZN6S664C53v16Ev();
extern void _ZN6S664C53v17Ev();
extern void _ZN6S664C53v18Ev();
extern void _ZN6S664C53v19Ev();
extern void _ZN6S664C53v20Ev();
extern void _ZN6S664C53v21Ev();
extern void _ZN6S664C53v22Ev();
extern void _ZN6S664C53v23Ev();
extern void _ZN6S664C53v24Ev();
extern void _ZN6S664C53v25Ev();
extern void _ZN6S664C53v26Ev();
extern void _ZN6S664C53v27Ev();
extern void _ZN6S664C53v28Ev();
extern void _ZN6S664C53v29Ev();
extern void _ZN6S664C53v30Ev();
extern void _ZN6S664C53v31Ev();
extern void _ZN6S664C53v32Ev();
extern void _ZN6S664C53v33Ev();
extern void _ZN6S664C53v34Ev();
extern void _ZN6S664C53v35Ev();
extern void _ZN6S664C53v36Ev();
extern void _ZN6S664C53v37Ev();
extern void _ZN6S664C53v38Ev();
extern void _ZN6S664C53v39Ev();
extern void _ZN6S664C53v40Ev();
extern void _ZN6S664C53v41Ev();
extern void _ZN6S664C53v42Ev();
extern void _ZN6S664C53v43Ev();
extern void _ZN6S664C53v44Ev();
extern void _ZN6S664C53v45Ev();
extern void _ZN6S664C53v46Ev();
extern void _ZN6S664C53v47Ev();
extern void _ZN6S664C53v48Ev();
extern void _ZN6S664C53v49Ev();
extern void _ZN6S664C53v50Ev();
extern void _ZN6S664C53v51Ev();
extern void _ZN6S664C53v52Ev();
extern void _ZN6S664C53v53Ev();
extern void _ZN6S664C53v54Ev();
extern void _ZN6S664C53v55Ev();
extern void _ZN6S664C53v56Ev();
extern void _ZN6S664C53v57Ev();
extern void _ZN6S664C53v58Ev();
extern void _ZN6S664C53v59Ev();
extern void _ZN6S664C53v60Ev();
extern void _ZN6S664C53v61Ev();
extern void _ZN6S664C53v62Ev();
extern void _ZN6S664C53v63Ev();
extern void _ZN6S664C53v64Ev();
extern void _ZN6S664C53v65Ev();
extern void _ZN6S664C53v66Ev();
extern void _ZN6S664C53v67Ev();
extern void _ZN6S664C53v68Ev();
extern void _ZN6S664C53v69Ev();
extern void _ZN6S664C43v70Ev();
extern void _ZN6S664C43v71Ev();
extern void _ZN6S664C43v72Ev();
extern void _ZN6S664C43v73Ev();
extern void _ZN6S664C43v74Ev();
extern void _ZN6S664C43v75Ev();
extern void _ZN6S664C43v76Ev();
extern void _ZN6S664C43v77Ev();
extern void _ZN6S664C43v78Ev();
extern void _ZN6S664C43v79Ev();
extern void _ZN6S664C43v80Ev();
extern void _ZN6S664C43v81Ev();
extern void _ZN6S664C43v82Ev();
static  VTBL_ENTRY vtc_S664C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S664C4[0]),
  (VTBL_ENTRY)&_ZN6S664C4D1Ev,
  (VTBL_ENTRY)&_ZN6S664C4D0Ev,
  (VTBL_ENTRY)&_ZN6S664C52v6Ev,
  (VTBL_ENTRY)&_ZN6S664C52v7Ev,
  (VTBL_ENTRY)&_ZN6S664C52v8Ev,
  (VTBL_ENTRY)&_ZN6S664C52v9Ev,
  (VTBL_ENTRY)&_ZN6S664C53v10Ev,
  (VTBL_ENTRY)&_ZN6S664C53v11Ev,
  (VTBL_ENTRY)&_ZN6S664C53v12Ev,
  (VTBL_ENTRY)&_ZN6S664C53v13Ev,
  (VTBL_ENTRY)&_ZN6S664C53v14Ev,
  (VTBL_ENTRY)&_ZN6S664C53v15Ev,
  (VTBL_ENTRY)&_ZN6S664C53v16Ev,
  (VTBL_ENTRY)&_ZN6S664C53v17Ev,
  (VTBL_ENTRY)&_ZN6S664C53v18Ev,
  (VTBL_ENTRY)&_ZN6S664C53v19Ev,
  (VTBL_ENTRY)&_ZN6S664C53v20Ev,
  (VTBL_ENTRY)&_ZN6S664C53v21Ev,
  (VTBL_ENTRY)&_ZN6S664C53v22Ev,
  (VTBL_ENTRY)&_ZN6S664C53v23Ev,
  (VTBL_ENTRY)&_ZN6S664C53v24Ev,
  (VTBL_ENTRY)&_ZN6S664C53v25Ev,
  (VTBL_ENTRY)&_ZN6S664C53v26Ev,
  (VTBL_ENTRY)&_ZN6S664C53v27Ev,
  (VTBL_ENTRY)&_ZN6S664C53v28Ev,
  (VTBL_ENTRY)&_ZN6S664C53v29Ev,
  (VTBL_ENTRY)&_ZN6S664C53v30Ev,
  (VTBL_ENTRY)&_ZN6S664C53v31Ev,
  (VTBL_ENTRY)&_ZN6S664C53v32Ev,
  (VTBL_ENTRY)&_ZN6S664C53v33Ev,
  (VTBL_ENTRY)&_ZN6S664C53v34Ev,
  (VTBL_ENTRY)&_ZN6S664C53v35Ev,
  (VTBL_ENTRY)&_ZN6S664C53v36Ev,
  (VTBL_ENTRY)&_ZN6S664C53v37Ev,
  (VTBL_ENTRY)&_ZN6S664C53v38Ev,
  (VTBL_ENTRY)&_ZN6S664C53v39Ev,
  (VTBL_ENTRY)&_ZN6S664C53v40Ev,
  (VTBL_ENTRY)&_ZN6S664C53v41Ev,
  (VTBL_ENTRY)&_ZN6S664C53v42Ev,
  (VTBL_ENTRY)&_ZN6S664C53v43Ev,
  (VTBL_ENTRY)&_ZN6S664C53v44Ev,
  (VTBL_ENTRY)&_ZN6S664C53v45Ev,
  (VTBL_ENTRY)&_ZN6S664C53v46Ev,
  (VTBL_ENTRY)&_ZN6S664C53v47Ev,
  (VTBL_ENTRY)&_ZN6S664C53v48Ev,
  (VTBL_ENTRY)&_ZN6S664C53v49Ev,
  (VTBL_ENTRY)&_ZN6S664C53v50Ev,
  (VTBL_ENTRY)&_ZN6S664C53v51Ev,
  (VTBL_ENTRY)&_ZN6S664C53v52Ev,
  (VTBL_ENTRY)&_ZN6S664C53v53Ev,
  (VTBL_ENTRY)&_ZN6S664C53v54Ev,
  (VTBL_ENTRY)&_ZN6S664C53v55Ev,
  (VTBL_ENTRY)&_ZN6S664C53v56Ev,
  (VTBL_ENTRY)&_ZN6S664C53v57Ev,
  (VTBL_ENTRY)&_ZN6S664C53v58Ev,
  (VTBL_ENTRY)&_ZN6S664C53v59Ev,
  (VTBL_ENTRY)&_ZN6S664C53v60Ev,
  (VTBL_ENTRY)&_ZN6S664C53v61Ev,
  (VTBL_ENTRY)&_ZN6S664C53v62Ev,
  (VTBL_ENTRY)&_ZN6S664C53v63Ev,
  (VTBL_ENTRY)&_ZN6S664C53v64Ev,
  (VTBL_ENTRY)&_ZN6S664C53v65Ev,
  (VTBL_ENTRY)&_ZN6S664C53v66Ev,
  (VTBL_ENTRY)&_ZN6S664C53v67Ev,
  (VTBL_ENTRY)&_ZN6S664C53v68Ev,
  (VTBL_ENTRY)&_ZN6S664C53v69Ev,
  (VTBL_ENTRY)&_ZN6S664C43v70Ev,
  (VTBL_ENTRY)&_ZN6S664C43v71Ev,
  (VTBL_ENTRY)&_ZN6S664C43v72Ev,
  (VTBL_ENTRY)&_ZN6S664C43v73Ev,
  (VTBL_ENTRY)&_ZN6S664C43v74Ev,
  (VTBL_ENTRY)&_ZN6S664C43v75Ev,
  (VTBL_ENTRY)&_ZN6S664C43v76Ev,
  (VTBL_ENTRY)&_ZN6S664C43v77Ev,
  (VTBL_ENTRY)&_ZN6S664C43v78Ev,
  (VTBL_ENTRY)&_ZN6S664C43v79Ev,
  (VTBL_ENTRY)&_ZN6S664C43v80Ev,
  (VTBL_ENTRY)&_ZN6S664C43v81Ev,
  (VTBL_ENTRY)&_ZN6S664C43v82Ev,
};
extern VTBL_ENTRY _ZTI6S664C4[];
extern  VTBL_ENTRY _ZTV6S664C4[];
Class_Descriptor cd_S664C4 = {  "S664C4", // class name
  bases_S664C4, 1,
  &(vtc_S664C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI6S664C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S664C4),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S664C12_nt  {
  int s664c12f0[3];
  void  mf664c12(); // _ZN10S664C12_nt8mf664c12Ev
};
//SIG(-1 S664C12_nt) C1{ m Fi[3]}


void  S664C12_nt ::mf664c12(){}

//skip512 S664C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S664C3  : S664C4 {
  unsigned int s664c3f0:1;
  unsigned int s664c3f1:1;
  unsigned int s664c3f2:1;
  unsigned int s664c3f3:1;
  ::S664C12_nt s664c3f4;
  char s664c3f5[2];
  ::S273C7_nt s664c3f6;
  ::S664C12_nt s664c3f7;
  ::S273C7_nt s664c3f8;
  virtual  ~S664C3(); // _ZN6S664C3D1Ev
  virtual void  v83(); // _ZN6S664C33v83Ev
  virtual void  v84(); // _ZN6S664C33v84Ev
  virtual void  v85(); // _ZN6S664C33v85Ev
  virtual void  v86(); // _ZN6S664C33v86Ev
  virtual void  v87(); // _ZN6S664C33v87Ev
  virtual void  v88(); // _ZN6S664C33v88Ev
  virtual void  v89(); // _ZN6S664C33v89Ev
  S664C3(); // tgen
};
//SIG(-1 S664C3) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC10 FC4}


 S664C3 ::~S664C3(){ note_dtor("S664C3", this);}
void  S664C3 ::v83(){vfunc_called(this, "_ZN6S664C33v83Ev");}
void  S664C3 ::v84(){vfunc_called(this, "_ZN6S664C33v84Ev");}
void  S664C3 ::v85(){vfunc_called(this, "_ZN6S664C33v85Ev");}
void  S664C3 ::v86(){vfunc_called(this, "_ZN6S664C33v86Ev");}
void  S664C3 ::v87(){vfunc_called(this, "_ZN6S664C33v87Ev");}
void  S664C3 ::v88(){vfunc_called(this, "_ZN6S664C33v88Ev");}
void  S664C3 ::v89(){vfunc_called(this, "_ZN6S664C33v89Ev");}
S664C3 ::S664C3(){ note_ctor("S664C3", this);} // tgen

static void Test_S664C3()
{
  extern Class_Descriptor cd_S664C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S664C3, buf);
    S664C3 *dp, &lv = *(dp=new (buf) S664C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S664C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S664C3)");
    check_base_class_offset(lv, (S664C5*)(S664C4*), 0, "S664C3");
    check_base_class_offset(lv, (S664C4*), 0, "S664C3");
    set_bf_and_test(lv, s664c3f0, ABISELECT(204,148), 0, 1, 1, "S664C3");
    set_bf_and_test(lv, s664c3f1, ABISELECT(204,148), 1, 1, 1, "S664C3");
    set_bf_and_test(lv, s664c3f2, ABISELECT(204,148), 2, 1, 1, "S664C3");
    set_bf_and_test(lv, s664c3f3, ABISELECT(204,148), 3, 1, 1, "S664C3");
    check_field_offset(lv, s664c3f4, ABISELECT(208,152), "S664C3.s664c3f4");
    check_field_offset(lv, s664c3f5, ABISELECT(220,164), "S664C3.s664c3f5");
    check_field_offset(lv, s664c3f6, ABISELECT(224,168), "S664C3.s664c3f6");
    check_field_offset(lv, s664c3f7, ABISELECT(232,176), "S664C3.s664c3f7");
    check_field_offset(lv, s664c3f8, ABISELECT(244,188), "S664C3.s664c3f8");
    test_class_info(&lv, &cd_S664C3);
    dp->~S664C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS664C3(Test_S664C3, "S664C3", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S664C3C1Ev();
extern void _ZN6S664C3D1Ev();
Name_Map name_map_S664C3[] = {
  NSPAIR(_ZN6S664C3C1Ev),
  NSPAIR(_ZN6S664C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S664C5;
extern VTBL_ENTRY _ZTI6S664C5[];
extern  VTBL_ENTRY _ZTV6S664C5[];
extern Class_Descriptor cd_S664C4;
extern VTBL_ENTRY _ZTI6S664C4[];
extern  VTBL_ENTRY _ZTV6S664C4[];
static Base_Class bases_S664C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S664C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S664C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S664C3[];
extern void _ZN6S664C3D1Ev();
extern void _ZN6S664C3D0Ev();
extern void _ZN6S664C52v6Ev();
extern void _ZN6S664C52v7Ev();
extern void _ZN6S664C52v8Ev();
extern void _ZN6S664C52v9Ev();
extern void _ZN6S664C53v10Ev();
extern void _ZN6S664C53v11Ev();
extern void _ZN6S664C53v12Ev();
extern void _ZN6S664C53v13Ev();
extern void _ZN6S664C53v14Ev();
extern void _ZN6S664C53v15Ev();
extern void _ZN6S664C53v16Ev();
extern void _ZN6S664C53v17Ev();
extern void _ZN6S664C53v18Ev();
extern void _ZN6S664C53v19Ev();
extern void _ZN6S664C53v20Ev();
extern void _ZN6S664C53v21Ev();
extern void _ZN6S664C53v22Ev();
extern void _ZN6S664C53v23Ev();
extern void _ZN6S664C53v24Ev();
extern void _ZN6S664C53v25Ev();
extern void _ZN6S664C53v26Ev();
extern void _ZN6S664C53v27Ev();
extern void _ZN6S664C53v28Ev();
extern void _ZN6S664C53v29Ev();
extern void _ZN6S664C53v30Ev();
extern void _ZN6S664C53v31Ev();
extern void _ZN6S664C53v32Ev();
extern void _ZN6S664C53v33Ev();
extern void _ZN6S664C53v34Ev();
extern void _ZN6S664C53v35Ev();
extern void _ZN6S664C53v36Ev();
extern void _ZN6S664C53v37Ev();
extern void _ZN6S664C53v38Ev();
extern void _ZN6S664C53v39Ev();
extern void _ZN6S664C53v40Ev();
extern void _ZN6S664C53v41Ev();
extern void _ZN6S664C53v42Ev();
extern void _ZN6S664C53v43Ev();
extern void _ZN6S664C53v44Ev();
extern void _ZN6S664C53v45Ev();
extern void _ZN6S664C53v46Ev();
extern void _ZN6S664C53v47Ev();
extern void _ZN6S664C53v48Ev();
extern void _ZN6S664C53v49Ev();
extern void _ZN6S664C53v50Ev();
extern void _ZN6S664C53v51Ev();
extern void _ZN6S664C53v52Ev();
extern void _ZN6S664C53v53Ev();
extern void _ZN6S664C53v54Ev();
extern void _ZN6S664C53v55Ev();
extern void _ZN6S664C53v56Ev();
extern void _ZN6S664C53v57Ev();
extern void _ZN6S664C53v58Ev();
extern void _ZN6S664C53v59Ev();
extern void _ZN6S664C53v60Ev();
extern void _ZN6S664C53v61Ev();
extern void _ZN6S664C53v62Ev();
extern void _ZN6S664C53v63Ev();
extern void _ZN6S664C53v64Ev();
extern void _ZN6S664C53v65Ev();
extern void _ZN6S664C53v66Ev();
extern void _ZN6S664C53v67Ev();
extern void _ZN6S664C53v68Ev();
extern void _ZN6S664C53v69Ev();
extern void _ZN6S664C43v70Ev();
extern void _ZN6S664C43v71Ev();
extern void _ZN6S664C43v72Ev();
extern void _ZN6S664C43v73Ev();
extern void _ZN6S664C43v74Ev();
extern void _ZN6S664C43v75Ev();
extern void _ZN6S664C43v76Ev();
extern void _ZN6S664C43v77Ev();
extern void _ZN6S664C43v78Ev();
extern void _ZN6S664C43v79Ev();
extern void _ZN6S664C43v80Ev();
extern void _ZN6S664C43v81Ev();
extern void _ZN6S664C43v82Ev();
extern void _ZN6S664C33v83Ev();
extern void _ZN6S664C33v84Ev();
extern void _ZN6S664C33v85Ev();
extern void _ZN6S664C33v86Ev();
extern void _ZN6S664C33v87Ev();
extern void _ZN6S664C33v88Ev();
extern void _ZN6S664C33v89Ev();
static  VTBL_ENTRY vtc_S664C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S664C3[0]),
  (VTBL_ENTRY)&_ZN6S664C3D1Ev,
  (VTBL_ENTRY)&_ZN6S664C3D0Ev,
  (VTBL_ENTRY)&_ZN6S664C52v6Ev,
  (VTBL_ENTRY)&_ZN6S664C52v7Ev,
  (VTBL_ENTRY)&_ZN6S664C52v8Ev,
  (VTBL_ENTRY)&_ZN6S664C52v9Ev,
  (VTBL_ENTRY)&_ZN6S664C53v10Ev,
  (VTBL_ENTRY)&_ZN6S664C53v11Ev,
  (VTBL_ENTRY)&_ZN6S664C53v12Ev,
  (VTBL_ENTRY)&_ZN6S664C53v13Ev,
  (VTBL_ENTRY)&_ZN6S664C53v14Ev,
  (VTBL_ENTRY)&_ZN6S664C53v15Ev,
  (VTBL_ENTRY)&_ZN6S664C53v16Ev,
  (VTBL_ENTRY)&_ZN6S664C53v17Ev,
  (VTBL_ENTRY)&_ZN6S664C53v18Ev,
  (VTBL_ENTRY)&_ZN6S664C53v19Ev,
  (VTBL_ENTRY)&_ZN6S664C53v20Ev,
  (VTBL_ENTRY)&_ZN6S664C53v21Ev,
  (VTBL_ENTRY)&_ZN6S664C53v22Ev,
  (VTBL_ENTRY)&_ZN6S664C53v23Ev,
  (VTBL_ENTRY)&_ZN6S664C53v24Ev,
  (VTBL_ENTRY)&_ZN6S664C53v25Ev,
  (VTBL_ENTRY)&_ZN6S664C53v26Ev,
  (VTBL_ENTRY)&_ZN6S664C53v27Ev,
  (VTBL_ENTRY)&_ZN6S664C53v28Ev,
  (VTBL_ENTRY)&_ZN6S664C53v29Ev,
  (VTBL_ENTRY)&_ZN6S664C53v30Ev,
  (VTBL_ENTRY)&_ZN6S664C53v31Ev,
  (VTBL_ENTRY)&_ZN6S664C53v32Ev,
  (VTBL_ENTRY)&_ZN6S664C53v33Ev,
  (VTBL_ENTRY)&_ZN6S664C53v34Ev,
  (VTBL_ENTRY)&_ZN6S664C53v35Ev,
  (VTBL_ENTRY)&_ZN6S664C53v36Ev,
  (VTBL_ENTRY)&_ZN6S664C53v37Ev,
  (VTBL_ENTRY)&_ZN6S664C53v38Ev,
  (VTBL_ENTRY)&_ZN6S664C53v39Ev,
  (VTBL_ENTRY)&_ZN6S664C53v40Ev,
  (VTBL_ENTRY)&_ZN6S664C53v41Ev,
  (VTBL_ENTRY)&_ZN6S664C53v42Ev,
  (VTBL_ENTRY)&_ZN6S664C53v43Ev,
  (VTBL_ENTRY)&_ZN6S664C53v44Ev,
  (VTBL_ENTRY)&_ZN6S664C53v45Ev,
  (VTBL_ENTRY)&_ZN6S664C53v46Ev,
  (VTBL_ENTRY)&_ZN6S664C53v47Ev,
  (VTBL_ENTRY)&_ZN6S664C53v48Ev,
  (VTBL_ENTRY)&_ZN6S664C53v49Ev,
  (VTBL_ENTRY)&_ZN6S664C53v50Ev,
  (VTBL_ENTRY)&_ZN6S664C53v51Ev,
  (VTBL_ENTRY)&_ZN6S664C53v52Ev,
  (VTBL_ENTRY)&_ZN6S664C53v53Ev,
  (VTBL_ENTRY)&_ZN6S664C53v54Ev,
  (VTBL_ENTRY)&_ZN6S664C53v55Ev,
  (VTBL_ENTRY)&_ZN6S664C53v56Ev,
  (VTBL_ENTRY)&_ZN6S664C53v57Ev,
  (VTBL_ENTRY)&_ZN6S664C53v58Ev,
  (VTBL_ENTRY)&_ZN6S664C53v59Ev,
  (VTBL_ENTRY)&_ZN6S664C53v60Ev,
  (VTBL_ENTRY)&_ZN6S664C53v61Ev,
  (VTBL_ENTRY)&_ZN6S664C53v62Ev,
  (VTBL_ENTRY)&_ZN6S664C53v63Ev,
  (VTBL_ENTRY)&_ZN6S664C53v64Ev,
  (VTBL_ENTRY)&_ZN6S664C53v65Ev,
  (VTBL_ENTRY)&_ZN6S664C53v66Ev,
  (VTBL_ENTRY)&_ZN6S664C53v67Ev,
  (VTBL_ENTRY)&_ZN6S664C53v68Ev,
  (VTBL_ENTRY)&_ZN6S664C53v69Ev,
  (VTBL_ENTRY)&_ZN6S664C43v70Ev,
  (VTBL_ENTRY)&_ZN6S664C43v71Ev,
  (VTBL_ENTRY)&_ZN6S664C43v72Ev,
  (VTBL_ENTRY)&_ZN6S664C43v73Ev,
  (VTBL_ENTRY)&_ZN6S664C43v74Ev,
  (VTBL_ENTRY)&_ZN6S664C43v75Ev,
  (VTBL_ENTRY)&_ZN6S664C43v76Ev,
  (VTBL_ENTRY)&_ZN6S664C43v77Ev,
  (VTBL_ENTRY)&_ZN6S664C43v78Ev,
  (VTBL_ENTRY)&_ZN6S664C43v79Ev,
  (VTBL_ENTRY)&_ZN6S664C43v80Ev,
  (VTBL_ENTRY)&_ZN6S664C43v81Ev,
  (VTBL_ENTRY)&_ZN6S664C43v82Ev,
  (VTBL_ENTRY)&_ZN6S664C33v83Ev,
  (VTBL_ENTRY)&_ZN6S664C33v84Ev,
  (VTBL_ENTRY)&_ZN6S664C33v85Ev,
  (VTBL_ENTRY)&_ZN6S664C33v86Ev,
  (VTBL_ENTRY)&_ZN6S664C33v87Ev,
  (VTBL_ENTRY)&_ZN6S664C33v88Ev,
  (VTBL_ENTRY)&_ZN6S664C33v89Ev,
};
extern VTBL_ENTRY _ZTI6S664C3[];
extern  VTBL_ENTRY _ZTV6S664C3[];
Class_Descriptor cd_S664C3 = {  "S664C3", // class name
  bases_S664C3, 2,
  &(vtc_S664C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S664C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S664C3),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S664C2  : S664C3 {
  unsigned int s664c2f0:1;
  unsigned int s664c2f1:1;
  unsigned int s664c2f2:1;
  unsigned int s664c2f3:1;
  unsigned int s664c2f4:1;
  void *s664c2f5;
  int s664c2f6[4];
  void *s664c2f7;
  int s664c2f8[2];
  ::S664C12_nt s664c2f9;
  ::S664C12_nt s664c2f10;
  void *s664c2f11[2];
  unsigned int s664c2f12:1;
  unsigned int s664c2f13:1;
  ::S273C7_nt s664c2f14;
  int s664c2f15[2];
  ::S664C12_nt s664c2f16;
  int s664c2f17[2];
  void *s664c2f18;
  ::S664C12_nt s664c2f19;
  ::S664C12_nt s664c2f20;
  void *s664c2f21[2];
  virtual  ~S664C2(); // _ZN6S664C2D1Ev
  virtual void  v90(); // _ZN6S664C23v90Ev
  virtual void  v91(); // _ZN6S664C23v91Ev
  virtual void  v92(); // _ZN6S664C23v92Ev
  virtual void  v93(); // _ZN6S664C23v93Ev
  virtual void  v94(); // _ZN6S664C23v94Ev
  virtual void  v95(); // _ZN6S664C23v95Ev
  S664C2(); // tgen
};
//SIG(-1 S664C2) C1{ BC2{ BC3{ BC4{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v84 v85 v86 v87 v88 v89 v90 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC11 FC5} vd v1 v2 v3 v4 v5 v6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fp Fi[4] Fp Fi[2] FC11 FC11 Fp[2] Fi:1 Fi:1 FC5 Fi[2] FC11 Fi[2] Fp FC11 FC11 Fp[2]}


 S664C2 ::~S664C2(){ note_dtor("S664C2", this);}
void  S664C2 ::v90(){vfunc_called(this, "_ZN6S664C23v90Ev");}
void  S664C2 ::v91(){vfunc_called(this, "_ZN6S664C23v91Ev");}
void  S664C2 ::v92(){vfunc_called(this, "_ZN6S664C23v92Ev");}
void  S664C2 ::v93(){vfunc_called(this, "_ZN6S664C23v93Ev");}
void  S664C2 ::v94(){vfunc_called(this, "_ZN6S664C23v94Ev");}
void  S664C2 ::v95(){vfunc_called(this, "_ZN6S664C23v95Ev");}
S664C2 ::S664C2(){ note_ctor("S664C2", this);} // tgen

static void Test_S664C2()
{
  extern Class_Descriptor cd_S664C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,86)];
    init_test(&cd_S664C2, buf);
    S664C2 *dp, &lv = *(dp=new (buf) S664C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,340), "sizeof(S664C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S664C2)");
    check_base_class_offset(lv, (S664C5*)(S664C4*)(S664C3*), 0, "S664C2");
    check_base_class_offset(lv, (S664C4*)(S664C3*), 0, "S664C2");
    check_base_class_offset(lv, (S664C3*), 0, "S664C2");
    set_bf_and_test(lv, s664c2f0, ABISELECT(252,196), 0, 1, 1, "S664C2");
    set_bf_and_test(lv, s664c2f1, ABISELECT(252,196), 1, 1, 1, "S664C2");
    set_bf_and_test(lv, s664c2f2, ABISELECT(252,196), 2, 1, 1, "S664C2");
    set_bf_and_test(lv, s664c2f3, ABISELECT(252,196), 3, 1, 1, "S664C2");
    set_bf_and_test(lv, s664c2f4, ABISELECT(252,196), 4, 1, 1, "S664C2");
    check_field_offset(lv, s664c2f5, ABISELECT(256,200), "S664C2.s664c2f5");
    check_field_offset(lv, s664c2f6, ABISELECT(264,204), "S664C2.s664c2f6");
    check_field_offset(lv, s664c2f7, ABISELECT(280,220), "S664C2.s664c2f7");
    check_field_offset(lv, s664c2f8, ABISELECT(288,224), "S664C2.s664c2f8");
    check_field_offset(lv, s664c2f9, ABISELECT(296,232), "S664C2.s664c2f9");
    check_field_offset(lv, s664c2f10, ABISELECT(308,244), "S664C2.s664c2f10");
    check_field_offset(lv, s664c2f11, ABISELECT(320,256), "S664C2.s664c2f11");
    set_bf_and_test(lv, s664c2f12, ABISELECT(336,264), 0, 1, 1, "S664C2");
    set_bf_and_test(lv, s664c2f13, ABISELECT(336,264), 1, 1, 1, "S664C2");
    check_field_offset(lv, s664c2f14, ABISELECT(340,268), "S664C2.s664c2f14");
    check_field_offset(lv, s664c2f15, ABISELECT(348,276), "S664C2.s664c2f15");
    check_field_offset(lv, s664c2f16, ABISELECT(356,284), "S664C2.s664c2f16");
    check_field_offset(lv, s664c2f17, ABISELECT(368,296), "S664C2.s664c2f17");
    check_field_offset(lv, s664c2f18, ABISELECT(376,304), "S664C2.s664c2f18");
    check_field_offset(lv, s664c2f19, ABISELECT(384,308), "S664C2.s664c2f19");
    check_field_offset(lv, s664c2f20, ABISELECT(396,320), "S664C2.s664c2f20");
    check_field_offset(lv, s664c2f21, ABISELECT(408,332), "S664C2.s664c2f21");
    test_class_info(&lv, &cd_S664C2);
    dp->~S664C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS664C2(Test_S664C2, "S664C2", ABISELECT(424,340));

#else // __cplusplus

extern void _ZN6S664C2C1Ev();
extern void _ZN6S664C2D1Ev();
Name_Map name_map_S664C2[] = {
  NSPAIR(_ZN6S664C2C1Ev),
  NSPAIR(_ZN6S664C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S664C5;
extern VTBL_ENTRY _ZTI6S664C5[];
extern  VTBL_ENTRY _ZTV6S664C5[];
extern Class_Descriptor cd_S664C4;
extern VTBL_ENTRY _ZTI6S664C4[];
extern  VTBL_ENTRY _ZTV6S664C4[];
extern Class_Descriptor cd_S664C3;
extern VTBL_ENTRY _ZTI6S664C3[];
extern  VTBL_ENTRY _ZTV6S664C3[];
static Base_Class bases_S664C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S664C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S664C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S664C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S664C2[];
extern void _ZN6S664C2D1Ev();
extern void _ZN6S664C2D0Ev();
extern void _ZN6S664C52v6Ev();
extern void _ZN6S664C52v7Ev();
extern void _ZN6S664C52v8Ev();
extern void _ZN6S664C52v9Ev();
extern void _ZN6S664C53v10Ev();
extern void _ZN6S664C53v11Ev();
extern void _ZN6S664C53v12Ev();
extern void _ZN6S664C53v13Ev();
extern void _ZN6S664C53v14Ev();
extern void _ZN6S664C53v15Ev();
extern void _ZN6S664C53v16Ev();
extern void _ZN6S664C53v17Ev();
extern void _ZN6S664C53v18Ev();
extern void _ZN6S664C53v19Ev();
extern void _ZN6S664C53v20Ev();
extern void _ZN6S664C53v21Ev();
extern void _ZN6S664C53v22Ev();
extern void _ZN6S664C53v23Ev();
extern void _ZN6S664C53v24Ev();
extern void _ZN6S664C53v25Ev();
extern void _ZN6S664C53v26Ev();
extern void _ZN6S664C53v27Ev();
extern void _ZN6S664C53v28Ev();
extern void _ZN6S664C53v29Ev();
extern void _ZN6S664C53v30Ev();
extern void _ZN6S664C53v31Ev();
extern void _ZN6S664C53v32Ev();
extern void _ZN6S664C53v33Ev();
extern void _ZN6S664C53v34Ev();
extern void _ZN6S664C53v35Ev();
extern void _ZN6S664C53v36Ev();
extern void _ZN6S664C53v37Ev();
extern void _ZN6S664C53v38Ev();
extern void _ZN6S664C53v39Ev();
extern void _ZN6S664C53v40Ev();
extern void _ZN6S664C53v41Ev();
extern void _ZN6S664C53v42Ev();
extern void _ZN6S664C53v43Ev();
extern void _ZN6S664C53v44Ev();
extern void _ZN6S664C53v45Ev();
extern void _ZN6S664C53v46Ev();
extern void _ZN6S664C53v47Ev();
extern void _ZN6S664C53v48Ev();
extern void _ZN6S664C53v49Ev();
extern void _ZN6S664C53v50Ev();
extern void _ZN6S664C53v51Ev();
extern void _ZN6S664C53v52Ev();
extern void _ZN6S664C53v53Ev();
extern void _ZN6S664C53v54Ev();
extern void _ZN6S664C53v55Ev();
extern void _ZN6S664C53v56Ev();
extern void _ZN6S664C53v57Ev();
extern void _ZN6S664C53v58Ev();
extern void _ZN6S664C53v59Ev();
extern void _ZN6S664C53v60Ev();
extern void _ZN6S664C53v61Ev();
extern void _ZN6S664C53v62Ev();
extern void _ZN6S664C53v63Ev();
extern void _ZN6S664C53v64Ev();
extern void _ZN6S664C53v65Ev();
extern void _ZN6S664C53v66Ev();
extern void _ZN6S664C53v67Ev();
extern void _ZN6S664C53v68Ev();
extern void _ZN6S664C53v69Ev();
extern void _ZN6S664C43v70Ev();
extern void _ZN6S664C43v71Ev();
extern void _ZN6S664C43v72Ev();
extern void _ZN6S664C43v73Ev();
extern void _ZN6S664C43v74Ev();
extern void _ZN6S664C43v75Ev();
extern void _ZN6S664C43v76Ev();
extern void _ZN6S664C43v77Ev();
extern void _ZN6S664C43v78Ev();
extern void _ZN6S664C43v79Ev();
extern void _ZN6S664C43v80Ev();
extern void _ZN6S664C43v81Ev();
extern void _ZN6S664C43v82Ev();
extern void _ZN6S664C33v83Ev();
extern void _ZN6S664C33v84Ev();
extern void _ZN6S664C33v85Ev();
extern void _ZN6S664C33v86Ev();
extern void _ZN6S664C33v87Ev();
extern void _ZN6S664C33v88Ev();
extern void _ZN6S664C33v89Ev();
extern void _ZN6S664C23v90Ev();
extern void _ZN6S664C23v91Ev();
extern void _ZN6S664C23v92Ev();
extern void _ZN6S664C23v93Ev();
extern void _ZN6S664C23v94Ev();
extern void _ZN6S664C23v95Ev();
static  VTBL_ENTRY vtc_S664C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S664C2[0]),
  (VTBL_ENTRY)&_ZN6S664C2D1Ev,
  (VTBL_ENTRY)&_ZN6S664C2D0Ev,
  (VTBL_ENTRY)&_ZN6S664C52v6Ev,
  (VTBL_ENTRY)&_ZN6S664C52v7Ev,
  (VTBL_ENTRY)&_ZN6S664C52v8Ev,
  (VTBL_ENTRY)&_ZN6S664C52v9Ev,
  (VTBL_ENTRY)&_ZN6S664C53v10Ev,
  (VTBL_ENTRY)&_ZN6S664C53v11Ev,
  (VTBL_ENTRY)&_ZN6S664C53v12Ev,
  (VTBL_ENTRY)&_ZN6S664C53v13Ev,
  (VTBL_ENTRY)&_ZN6S664C53v14Ev,
  (VTBL_ENTRY)&_ZN6S664C53v15Ev,
  (VTBL_ENTRY)&_ZN6S664C53v16Ev,
  (VTBL_ENTRY)&_ZN6S664C53v17Ev,
  (VTBL_ENTRY)&_ZN6S664C53v18Ev,
  (VTBL_ENTRY)&_ZN6S664C53v19Ev,
  (VTBL_ENTRY)&_ZN6S664C53v20Ev,
  (VTBL_ENTRY)&_ZN6S664C53v21Ev,
  (VTBL_ENTRY)&_ZN6S664C53v22Ev,
  (VTBL_ENTRY)&_ZN6S664C53v23Ev,
  (VTBL_ENTRY)&_ZN6S664C53v24Ev,
  (VTBL_ENTRY)&_ZN6S664C53v25Ev,
  (VTBL_ENTRY)&_ZN6S664C53v26Ev,
  (VTBL_ENTRY)&_ZN6S664C53v27Ev,
  (VTBL_ENTRY)&_ZN6S664C53v28Ev,
  (VTBL_ENTRY)&_ZN6S664C53v29Ev,
  (VTBL_ENTRY)&_ZN6S664C53v30Ev,
  (VTBL_ENTRY)&_ZN6S664C53v31Ev,
  (VTBL_ENTRY)&_ZN6S664C53v32Ev,
  (VTBL_ENTRY)&_ZN6S664C53v33Ev,
  (VTBL_ENTRY)&_ZN6S664C53v34Ev,
  (VTBL_ENTRY)&_ZN6S664C53v35Ev,
  (VTBL_ENTRY)&_ZN6S664C53v36Ev,
  (VTBL_ENTRY)&_ZN6S664C53v37Ev,
  (VTBL_ENTRY)&_ZN6S664C53v38Ev,
  (VTBL_ENTRY)&_ZN6S664C53v39Ev,
  (VTBL_ENTRY)&_ZN6S664C53v40Ev,
  (VTBL_ENTRY)&_ZN6S664C53v41Ev,
  (VTBL_ENTRY)&_ZN6S664C53v42Ev,
  (VTBL_ENTRY)&_ZN6S664C53v43Ev,
  (VTBL_ENTRY)&_ZN6S664C53v44Ev,
  (VTBL_ENTRY)&_ZN6S664C53v45Ev,
  (VTBL_ENTRY)&_ZN6S664C53v46Ev,
  (VTBL_ENTRY)&_ZN6S664C53v47Ev,
  (VTBL_ENTRY)&_ZN6S664C53v48Ev,
  (VTBL_ENTRY)&_ZN6S664C53v49Ev,
  (VTBL_ENTRY)&_ZN6S664C53v50Ev,
  (VTBL_ENTRY)&_ZN6S664C53v51Ev,
  (VTBL_ENTRY)&_ZN6S664C53v52Ev,
  (VTBL_ENTRY)&_ZN6S664C53v53Ev,
  (VTBL_ENTRY)&_ZN6S664C53v54Ev,
  (VTBL_ENTRY)&_ZN6S664C53v55Ev,
  (VTBL_ENTRY)&_ZN6S664C53v56Ev,
  (VTBL_ENTRY)&_ZN6S664C53v57Ev,
  (VTBL_ENTRY)&_ZN6S664C53v58Ev,
  (VTBL_ENTRY)&_ZN6S664C53v59Ev,
  (VTBL_ENTRY)&_ZN6S664C53v60Ev,
  (VTBL_ENTRY)&_ZN6S664C53v61Ev,
  (VTBL_ENTRY)&_ZN6S664C53v62Ev,
  (VTBL_ENTRY)&_ZN6S664C53v63Ev,
  (VTBL_ENTRY)&_ZN6S664C53v64Ev,
  (VTBL_ENTRY)&_ZN6S664C53v65Ev,
  (VTBL_ENTRY)&_ZN6S664C53v66Ev,
  (VTBL_ENTRY)&_ZN6S664C53v67Ev,
  (VTBL_ENTRY)&_ZN6S664C53v68Ev,
  (VTBL_ENTRY)&_ZN6S664C53v69Ev,
  (VTBL_ENTRY)&_ZN6S664C43v70Ev,
  (VTBL_ENTRY)&_ZN6S664C43v71Ev,
  (VTBL_ENTRY)&_ZN6S664C43v72Ev,
  (VTBL_ENTRY)&_ZN6S664C43v73Ev,
  (VTBL_ENTRY)&_ZN6S664C43v74Ev,
  (VTBL_ENTRY)&_ZN6S664C43v75Ev,
  (VTBL_ENTRY)&_ZN6S664C43v76Ev,
  (VTBL_ENTRY)&_ZN6S664C43v77Ev,
  (VTBL_ENTRY)&_ZN6S664C43v78Ev,
  (VTBL_ENTRY)&_ZN6S664C43v79Ev,
  (VTBL_ENTRY)&_ZN6S664C43v80Ev,
  (VTBL_ENTRY)&_ZN6S664C43v81Ev,
  (VTBL_ENTRY)&_ZN6S664C43v82Ev,
  (VTBL_ENTRY)&_ZN6S664C33v83Ev,
  (VTBL_ENTRY)&_ZN6S664C33v84Ev,
  (VTBL_ENTRY)&_ZN6S664C33v85Ev,
  (VTBL_ENTRY)&_ZN6S664C33v86Ev,
  (VTBL_ENTRY)&_ZN6S664C33v87Ev,
  (VTBL_ENTRY)&_ZN6S664C33v88Ev,
  (VTBL_ENTRY)&_ZN6S664C33v89Ev,
  (VTBL_ENTRY)&_ZN6S664C23v90Ev,
  (VTBL_ENTRY)&_ZN6S664C23v91Ev,
  (VTBL_ENTRY)&_ZN6S664C23v92Ev,
  (VTBL_ENTRY)&_ZN6S664C23v93Ev,
  (VTBL_ENTRY)&_ZN6S664C23v94Ev,
  (VTBL_ENTRY)&_ZN6S664C23v95Ev,
};
extern VTBL_ENTRY _ZTI6S664C2[];
extern  VTBL_ENTRY _ZTV6S664C2[];
Class_Descriptor cd_S664C2 = {  "S664C2", // class name
  bases_S664C2, 3,
  &(vtc_S664C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,340), // object size
  NSPAIRA(_ZTI6S664C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S664C2),94, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S664C1  : S664C2 {
  ::S664C12_nt s664c1f0;
  ::S664C12_nt s664c1f1;
  int s664c1f2[3];
  ::S664C12_nt s664c1f3;
  int s664c1f4;
  ::S664C12_nt s664c1f5;
  int s664c1f6[2];
  virtual  ~S664C1(); // _ZN6S664C1D1Ev
  virtual void  v1(); // _ZN6S664C12v1Ev
  virtual void  v2(); // _ZN6S664C12v2Ev
  virtual void  v3(); // _ZN6S664C12v3Ev
  virtual void  v4(); // _ZN6S664C12v4Ev
  virtual void  v5(); // _ZN6S664C12v5Ev
  S664C1(); // tgen
};
//SIG(1 S664C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fp FC6 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC10{ BC11{ BC9}} Fi:1 Fi[2] Fp Fi[3]} vd v83 v84 v85 v86 v87 v88 v89 Fi:1 Fi:1 Fi:1 Fi:1 FC12{ m Fi[3]} Fc[2] FC6 FC12 FC6} vd v90 v91 v92 v93 v94 v95 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fp Fi[4] Fp Fi[2] FC12 FC12 Fp[2] Fi:1 Fi:1 FC6 Fi[2] FC12 Fi[2] Fp FC12 FC12 Fp[2]} vd v1 v2 v3 v4 v5 FC12 FC12 Fi[3] FC12 Fi FC12 Fi[2]}


 S664C1 ::~S664C1(){ note_dtor("S664C1", this);}
void  S664C1 ::v1(){vfunc_called(this, "_ZN6S664C12v1Ev");}
void  S664C1 ::v2(){vfunc_called(this, "_ZN6S664C12v2Ev");}
void  S664C1 ::v3(){vfunc_called(this, "_ZN6S664C12v3Ev");}
void  S664C1 ::v4(){vfunc_called(this, "_ZN6S664C12v4Ev");}
void  S664C1 ::v5(){vfunc_called(this, "_ZN6S664C12v5Ev");}
S664C1 ::S664C1(){ note_ctor("S664C1", this);} // tgen

static void Test_S664C1()
{
  extern Class_Descriptor cd_S664C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(63,104)];
    init_test(&cd_S664C1, buf);
    S664C1 *dp, &lv = *(dp=new (buf) S664C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,412), "sizeof(S664C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S664C1)");
    check_base_class_offset(lv, (S664C5*)(S664C4*)(S664C3*)(S664C2*), 0, "S664C1");
    check_base_class_offset(lv, (S664C4*)(S664C3*)(S664C2*), 0, "S664C1");
    check_base_class_offset(lv, (S664C3*)(S664C2*), 0, "S664C1");
    check_base_class_offset(lv, (S664C2*), 0, "S664C1");
    check_field_offset(lv, s664c1f0, ABISELECT(424,340), "S664C1.s664c1f0");
    check_field_offset(lv, s664c1f1, ABISELECT(436,352), "S664C1.s664c1f1");
    check_field_offset(lv, s664c1f2, ABISELECT(448,364), "S664C1.s664c1f2");
    check_field_offset(lv, s664c1f3, ABISELECT(460,376), "S664C1.s664c1f3");
    check_field_offset(lv, s664c1f4, ABISELECT(472,388), "S664C1.s664c1f4");
    check_field_offset(lv, s664c1f5, ABISELECT(476,392), "S664C1.s664c1f5");
    check_field_offset(lv, s664c1f6, ABISELECT(488,404), "S664C1.s664c1f6");
    test_class_info(&lv, &cd_S664C1);
    dp->~S664C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS664C1(Test_S664C1, "S664C1", ABISELECT(496,412));

#else // __cplusplus

extern void _ZN6S664C1C1Ev();
extern void _ZN6S664C1D1Ev();
Name_Map name_map_S664C1[] = {
  NSPAIR(_ZN6S664C1C1Ev),
  NSPAIR(_ZN6S664C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S664C5;
extern VTBL_ENTRY _ZTI6S664C5[];
extern  VTBL_ENTRY _ZTV6S664C5[];
extern Class_Descriptor cd_S664C4;
extern VTBL_ENTRY _ZTI6S664C4[];
extern  VTBL_ENTRY _ZTV6S664C4[];
extern Class_Descriptor cd_S664C3;
extern VTBL_ENTRY _ZTI6S664C3[];
extern  VTBL_ENTRY _ZTV6S664C3[];
extern Class_Descriptor cd_S664C2;
extern VTBL_ENTRY _ZTI6S664C2[];
extern  VTBL_ENTRY _ZTV6S664C2[];
static Base_Class bases_S664C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S664C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S664C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S664C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S664C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S664C1[];
extern void _ZN6S664C1D1Ev();
extern void _ZN6S664C1D0Ev();
extern void _ZN6S664C52v6Ev();
extern void _ZN6S664C52v7Ev();
extern void _ZN6S664C52v8Ev();
extern void _ZN6S664C52v9Ev();
extern void _ZN6S664C53v10Ev();
extern void _ZN6S664C53v11Ev();
extern void _ZN6S664C53v12Ev();
extern void _ZN6S664C53v13Ev();
extern void _ZN6S664C53v14Ev();
extern void _ZN6S664C53v15Ev();
extern void _ZN6S664C53v16Ev();
extern void _ZN6S664C53v17Ev();
extern void _ZN6S664C53v18Ev();
extern void _ZN6S664C53v19Ev();
extern void _ZN6S664C53v20Ev();
extern void _ZN6S664C53v21Ev();
extern void _ZN6S664C53v22Ev();
extern void _ZN6S664C53v23Ev();
extern void _ZN6S664C53v24Ev();
extern void _ZN6S664C53v25Ev();
extern void _ZN6S664C53v26Ev();
extern void _ZN6S664C53v27Ev();
extern void _ZN6S664C53v28Ev();
extern void _ZN6S664C53v29Ev();
extern void _ZN6S664C53v30Ev();
extern void _ZN6S664C53v31Ev();
extern void _ZN6S664C53v32Ev();
extern void _ZN6S664C53v33Ev();
extern void _ZN6S664C53v34Ev();
extern void _ZN6S664C53v35Ev();
extern void _ZN6S664C53v36Ev();
extern void _ZN6S664C53v37Ev();
extern void _ZN6S664C53v38Ev();
extern void _ZN6S664C53v39Ev();
extern void _ZN6S664C53v40Ev();
extern void _ZN6S664C53v41Ev();
extern void _ZN6S664C53v42Ev();
extern void _ZN6S664C53v43Ev();
extern void _ZN6S664C53v44Ev();
extern void _ZN6S664C53v45Ev();
extern void _ZN6S664C53v46Ev();
extern void _ZN6S664C53v47Ev();
extern void _ZN6S664C53v48Ev();
extern void _ZN6S664C53v49Ev();
extern void _ZN6S664C53v50Ev();
extern void _ZN6S664C53v51Ev();
extern void _ZN6S664C53v52Ev();
extern void _ZN6S664C53v53Ev();
extern void _ZN6S664C53v54Ev();
extern void _ZN6S664C53v55Ev();
extern void _ZN6S664C53v56Ev();
extern void _ZN6S664C53v57Ev();
extern void _ZN6S664C53v58Ev();
extern void _ZN6S664C53v59Ev();
extern void _ZN6S664C53v60Ev();
extern void _ZN6S664C53v61Ev();
extern void _ZN6S664C53v62Ev();
extern void _ZN6S664C53v63Ev();
extern void _ZN6S664C53v64Ev();
extern void _ZN6S664C53v65Ev();
extern void _ZN6S664C53v66Ev();
extern void _ZN6S664C53v67Ev();
extern void _ZN6S664C53v68Ev();
extern void _ZN6S664C53v69Ev();
extern void _ZN6S664C43v70Ev();
extern void _ZN6S664C43v71Ev();
extern void _ZN6S664C43v72Ev();
extern void _ZN6S664C43v73Ev();
extern void _ZN6S664C43v74Ev();
extern void _ZN6S664C43v75Ev();
extern void _ZN6S664C43v76Ev();
extern void _ZN6S664C43v77Ev();
extern void _ZN6S664C43v78Ev();
extern void _ZN6S664C43v79Ev();
extern void _ZN6S664C43v80Ev();
extern void _ZN6S664C43v81Ev();
extern void _ZN6S664C43v82Ev();
extern void _ZN6S664C33v83Ev();
extern void _ZN6S664C33v84Ev();
extern void _ZN6S664C33v85Ev();
extern void _ZN6S664C33v86Ev();
extern void _ZN6S664C33v87Ev();
extern void _ZN6S664C33v88Ev();
extern void _ZN6S664C33v89Ev();
extern void _ZN6S664C23v90Ev();
extern void _ZN6S664C23v91Ev();
extern void _ZN6S664C23v92Ev();
extern void _ZN6S664C23v93Ev();
extern void _ZN6S664C23v94Ev();
extern void _ZN6S664C23v95Ev();
extern void _ZN6S664C12v1Ev();
extern void _ZN6S664C12v2Ev();
extern void _ZN6S664C12v3Ev();
extern void _ZN6S664C12v4Ev();
extern void _ZN6S664C12v5Ev();
static  VTBL_ENTRY vtc_S664C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S664C1[0]),
  (VTBL_ENTRY)&_ZN6S664C1D1Ev,
  (VTBL_ENTRY)&_ZN6S664C1D0Ev,
  (VTBL_ENTRY)&_ZN6S664C52v6Ev,
  (VTBL_ENTRY)&_ZN6S664C52v7Ev,
  (VTBL_ENTRY)&_ZN6S664C52v8Ev,
  (VTBL_ENTRY)&_ZN6S664C52v9Ev,
  (VTBL_ENTRY)&_ZN6S664C53v10Ev,
  (VTBL_ENTRY)&_ZN6S664C53v11Ev,
  (VTBL_ENTRY)&_ZN6S664C53v12Ev,
  (VTBL_ENTRY)&_ZN6S664C53v13Ev,
  (VTBL_ENTRY)&_ZN6S664C53v14Ev,
  (VTBL_ENTRY)&_ZN6S664C53v15Ev,
  (VTBL_ENTRY)&_ZN6S664C53v16Ev,
  (VTBL_ENTRY)&_ZN6S664C53v17Ev,
  (VTBL_ENTRY)&_ZN6S664C53v18Ev,
  (VTBL_ENTRY)&_ZN6S664C53v19Ev,
  (VTBL_ENTRY)&_ZN6S664C53v20Ev,
  (VTBL_ENTRY)&_ZN6S664C53v21Ev,
  (VTBL_ENTRY)&_ZN6S664C53v22Ev,
  (VTBL_ENTRY)&_ZN6S664C53v23Ev,
  (VTBL_ENTRY)&_ZN6S664C53v24Ev,
  (VTBL_ENTRY)&_ZN6S664C53v25Ev,
  (VTBL_ENTRY)&_ZN6S664C53v26Ev,
  (VTBL_ENTRY)&_ZN6S664C53v27Ev,
  (VTBL_ENTRY)&_ZN6S664C53v28Ev,
  (VTBL_ENTRY)&_ZN6S664C53v29Ev,
  (VTBL_ENTRY)&_ZN6S664C53v30Ev,
  (VTBL_ENTRY)&_ZN6S664C53v31Ev,
  (VTBL_ENTRY)&_ZN6S664C53v32Ev,
  (VTBL_ENTRY)&_ZN6S664C53v33Ev,
  (VTBL_ENTRY)&_ZN6S664C53v34Ev,
  (VTBL_ENTRY)&_ZN6S664C53v35Ev,
  (VTBL_ENTRY)&_ZN6S664C53v36Ev,
  (VTBL_ENTRY)&_ZN6S664C53v37Ev,
  (VTBL_ENTRY)&_ZN6S664C53v38Ev,
  (VTBL_ENTRY)&_ZN6S664C53v39Ev,
  (VTBL_ENTRY)&_ZN6S664C53v40Ev,
  (VTBL_ENTRY)&_ZN6S664C53v41Ev,
  (VTBL_ENTRY)&_ZN6S664C53v42Ev,
  (VTBL_ENTRY)&_ZN6S664C53v43Ev,
  (VTBL_ENTRY)&_ZN6S664C53v44Ev,
  (VTBL_ENTRY)&_ZN6S664C53v45Ev,
  (VTBL_ENTRY)&_ZN6S664C53v46Ev,
  (VTBL_ENTRY)&_ZN6S664C53v47Ev,
  (VTBL_ENTRY)&_ZN6S664C53v48Ev,
  (VTBL_ENTRY)&_ZN6S664C53v49Ev,
  (VTBL_ENTRY)&_ZN6S664C53v50Ev,
  (VTBL_ENTRY)&_ZN6S664C53v51Ev,
  (VTBL_ENTRY)&_ZN6S664C53v52Ev,
  (VTBL_ENTRY)&_ZN6S664C53v53Ev,
  (VTBL_ENTRY)&_ZN6S664C53v54Ev,
  (VTBL_ENTRY)&_ZN6S664C53v55Ev,
  (VTBL_ENTRY)&_ZN6S664C53v56Ev,
  (VTBL_ENTRY)&_ZN6S664C53v57Ev,
  (VTBL_ENTRY)&_ZN6S664C53v58Ev,
  (VTBL_ENTRY)&_ZN6S664C53v59Ev,
  (VTBL_ENTRY)&_ZN6S664C53v60Ev,
  (VTBL_ENTRY)&_ZN6S664C53v61Ev,
  (VTBL_ENTRY)&_ZN6S664C53v62Ev,
  (VTBL_ENTRY)&_ZN6S664C53v63Ev,
  (VTBL_ENTRY)&_ZN6S664C53v64Ev,
  (VTBL_ENTRY)&_ZN6S664C53v65Ev,
  (VTBL_ENTRY)&_ZN6S664C53v66Ev,
  (VTBL_ENTRY)&_ZN6S664C53v67Ev,
  (VTBL_ENTRY)&_ZN6S664C53v68Ev,
  (VTBL_ENTRY)&_ZN6S664C53v69Ev,
  (VTBL_ENTRY)&_ZN6S664C43v70Ev,
  (VTBL_ENTRY)&_ZN6S664C43v71Ev,
  (VTBL_ENTRY)&_ZN6S664C43v72Ev,
  (VTBL_ENTRY)&_ZN6S664C43v73Ev,
  (VTBL_ENTRY)&_ZN6S664C43v74Ev,
  (VTBL_ENTRY)&_ZN6S664C43v75Ev,
  (VTBL_ENTRY)&_ZN6S664C43v76Ev,
  (VTBL_ENTRY)&_ZN6S664C43v77Ev,
  (VTBL_ENTRY)&_ZN6S664C43v78Ev,
  (VTBL_ENTRY)&_ZN6S664C43v79Ev,
  (VTBL_ENTRY)&_ZN6S664C43v80Ev,
  (VTBL_ENTRY)&_ZN6S664C43v81Ev,
  (VTBL_ENTRY)&_ZN6S664C43v82Ev,
  (VTBL_ENTRY)&_ZN6S664C33v83Ev,
  (VTBL_ENTRY)&_ZN6S664C33v84Ev,
  (VTBL_ENTRY)&_ZN6S664C33v85Ev,
  (VTBL_ENTRY)&_ZN6S664C33v86Ev,
  (VTBL_ENTRY)&_ZN6S664C33v87Ev,
  (VTBL_ENTRY)&_ZN6S664C33v88Ev,
  (VTBL_ENTRY)&_ZN6S664C33v89Ev,
  (VTBL_ENTRY)&_ZN6S664C23v90Ev,
  (VTBL_ENTRY)&_ZN6S664C23v91Ev,
  (VTBL_ENTRY)&_ZN6S664C23v92Ev,
  (VTBL_ENTRY)&_ZN6S664C23v93Ev,
  (VTBL_ENTRY)&_ZN6S664C23v94Ev,
  (VTBL_ENTRY)&_ZN6S664C23v95Ev,
  (VTBL_ENTRY)&_ZN6S664C12v1Ev,
  (VTBL_ENTRY)&_ZN6S664C12v2Ev,
  (VTBL_ENTRY)&_ZN6S664C12v3Ev,
  (VTBL_ENTRY)&_ZN6S664C12v4Ev,
  (VTBL_ENTRY)&_ZN6S664C12v5Ev,
};
extern VTBL_ENTRY _ZTI6S664C1[];
extern  VTBL_ENTRY _ZTV6S664C1[];
Class_Descriptor cd_S664C1 = {  "S664C1", // class name
  bases_S664C1, 4,
  &(vtc_S664C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,412), // object size
  NSPAIRA(_ZTI6S664C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S664C1),99, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S632C5  {
  int s632c5f0;
  __tsi64 s632c5f1;
  void *s632c5f2[4];
  int s632c5f3[2];
  void *s632c5f4;
  ::S273C7_nt s632c5f5;
  void *s632c5f6[2];
  virtual  ~S632C5(); // _ZN6S632C5D1Ev
  virtual void  v5(); // _ZN6S632C52v5Ev
  virtual void  v6(); // _ZN6S632C52v6Ev
  virtual void  v7(); // _ZN6S632C52v7Ev
  virtual void  v8(); // _ZN6S632C52v8Ev
  virtual void  v9(); // _ZN6S632C52v9Ev
  virtual void  v10(); // _ZN6S632C53v10Ev
  virtual void  v11(); // _ZN6S632C53v11Ev
  virtual void  v12(); // _ZN6S632C53v12Ev
  virtual void  v13(); // _ZN6S632C53v13Ev
  virtual void  v14(); // _ZN6S632C53v14Ev
  virtual void  v15(); // _ZN6S632C53v15Ev
  virtual void  v16(); // _ZN6S632C53v16Ev
  virtual void  v17(); // _ZN6S632C53v17Ev
  virtual void  v18(); // _ZN6S632C53v18Ev
  virtual void  v19(); // _ZN6S632C53v19Ev
  virtual void  v20(); // _ZN6S632C53v20Ev
  virtual void  v21(); // _ZN6S632C53v21Ev
  virtual void  v22(); // _ZN6S632C53v22Ev
  virtual void  v23(); // _ZN6S632C53v23Ev
  virtual void  v24(); // _ZN6S632C53v24Ev
  virtual void  v25(); // _ZN6S632C53v25Ev
  virtual void  v26(); // _ZN6S632C53v26Ev
  virtual void  v27(); // _ZN6S632C53v27Ev
  virtual void  v28(); // _ZN6S632C53v28Ev
  virtual void  v29(); // _ZN6S632C53v29Ev
  virtual void  v30(); // _ZN6S632C53v30Ev
  virtual void  v31(); // _ZN6S632C53v31Ev
  virtual void  v32(); // _ZN6S632C53v32Ev
  virtual void  v33(); // _ZN6S632C53v33Ev
  virtual void  v34(); // _ZN6S632C53v34Ev
  virtual void  v35(); // _ZN6S632C53v35Ev
  virtual void  v36(); // _ZN6S632C53v36Ev
  virtual void  v37(); // _ZN6S632C53v37Ev
  virtual void  v38(); // _ZN6S632C53v38Ev
  virtual void  v39(); // _ZN6S632C53v39Ev
  virtual void  v40(); // _ZN6S632C53v40Ev
  virtual void  v41(); // _ZN6S632C53v41Ev
  virtual void  v42(); // _ZN6S632C53v42Ev
  virtual void  v43(); // _ZN6S632C53v43Ev
  virtual void  v44(); // _ZN6S632C53v44Ev
  virtual void  v45(); // _ZN6S632C53v45Ev
  virtual void  v46(); // _ZN6S632C53v46Ev
  virtual void  v47(); // _ZN6S632C53v47Ev
  virtual void  v48(); // _ZN6S632C53v48Ev
  virtual void  v49(); // _ZN6S632C53v49Ev
  virtual void  v50(); // _ZN6S632C53v50Ev
  virtual void  v51(); // _ZN6S632C53v51Ev
  virtual void  v52(); // _ZN6S632C53v52Ev
  virtual void  v53(); // _ZN6S632C53v53Ev
  virtual void  v54(); // _ZN6S632C53v54Ev
  virtual void  v55(); // _ZN6S632C53v55Ev
  virtual void  v56(); // _ZN6S632C53v56Ev
  virtual void  v57(); // _ZN6S632C53v57Ev
  virtual void  v58(); // _ZN6S632C53v58Ev
  virtual void  v59(); // _ZN6S632C53v59Ev
  virtual void  v60(); // _ZN6S632C53v60Ev
  virtual void  v61(); // _ZN6S632C53v61Ev
  virtual void  v62(); // _ZN6S632C53v62Ev
  virtual void  v63(); // _ZN6S632C53v63Ev
  virtual void  v64(); // _ZN6S632C53v64Ev
  virtual void  v65(); // _ZN6S632C53v65Ev
  virtual void  v66(); // _ZN6S632C53v66Ev
  virtual void  v67(); // _ZN6S632C53v67Ev
  virtual void  v68(); // _ZN6S632C53v68Ev
  S632C5(); // tgen
};
//SIG(-1 S632C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S632C5 ::~S632C5(){ note_dtor("S632C5", this);}
void  S632C5 ::v5(){vfunc_called(this, "_ZN6S632C52v5Ev");}
void  S632C5 ::v6(){vfunc_called(this, "_ZN6S632C52v6Ev");}
void  S632C5 ::v7(){vfunc_called(this, "_ZN6S632C52v7Ev");}
void  S632C5 ::v8(){vfunc_called(this, "_ZN6S632C52v8Ev");}
void  S632C5 ::v9(){vfunc_called(this, "_ZN6S632C52v9Ev");}
void  S632C5 ::v10(){vfunc_called(this, "_ZN6S632C53v10Ev");}
void  S632C5 ::v11(){vfunc_called(this, "_ZN6S632C53v11Ev");}
void  S632C5 ::v12(){vfunc_called(this, "_ZN6S632C53v12Ev");}
void  S632C5 ::v13(){vfunc_called(this, "_ZN6S632C53v13Ev");}
void  S632C5 ::v14(){vfunc_called(this, "_ZN6S632C53v14Ev");}
void  S632C5 ::v15(){vfunc_called(this, "_ZN6S632C53v15Ev");}
void  S632C5 ::v16(){vfunc_called(this, "_ZN6S632C53v16Ev");}
void  S632C5 ::v17(){vfunc_called(this, "_ZN6S632C53v17Ev");}
void  S632C5 ::v18(){vfunc_called(this, "_ZN6S632C53v18Ev");}
void  S632C5 ::v19(){vfunc_called(this, "_ZN6S632C53v19Ev");}
void  S632C5 ::v20(){vfunc_called(this, "_ZN6S632C53v20Ev");}
void  S632C5 ::v21(){vfunc_called(this, "_ZN6S632C53v21Ev");}
void  S632C5 ::v22(){vfunc_called(this, "_ZN6S632C53v22Ev");}
void  S632C5 ::v23(){vfunc_called(this, "_ZN6S632C53v23Ev");}
void  S632C5 ::v24(){vfunc_called(this, "_ZN6S632C53v24Ev");}
void  S632C5 ::v25(){vfunc_called(this, "_ZN6S632C53v25Ev");}
void  S632C5 ::v26(){vfunc_called(this, "_ZN6S632C53v26Ev");}
void  S632C5 ::v27(){vfunc_called(this, "_ZN6S632C53v27Ev");}
void  S632C5 ::v28(){vfunc_called(this, "_ZN6S632C53v28Ev");}
void  S632C5 ::v29(){vfunc_called(this, "_ZN6S632C53v29Ev");}
void  S632C5 ::v30(){vfunc_called(this, "_ZN6S632C53v30Ev");}
void  S632C5 ::v31(){vfunc_called(this, "_ZN6S632C53v31Ev");}
void  S632C5 ::v32(){vfunc_called(this, "_ZN6S632C53v32Ev");}
void  S632C5 ::v33(){vfunc_called(this, "_ZN6S632C53v33Ev");}
void  S632C5 ::v34(){vfunc_called(this, "_ZN6S632C53v34Ev");}
void  S632C5 ::v35(){vfunc_called(this, "_ZN6S632C53v35Ev");}
void  S632C5 ::v36(){vfunc_called(this, "_ZN6S632C53v36Ev");}
void  S632C5 ::v37(){vfunc_called(this, "_ZN6S632C53v37Ev");}
void  S632C5 ::v38(){vfunc_called(this, "_ZN6S632C53v38Ev");}
void  S632C5 ::v39(){vfunc_called(this, "_ZN6S632C53v39Ev");}
void  S632C5 ::v40(){vfunc_called(this, "_ZN6S632C53v40Ev");}
void  S632C5 ::v41(){vfunc_called(this, "_ZN6S632C53v41Ev");}
void  S632C5 ::v42(){vfunc_called(this, "_ZN6S632C53v42Ev");}
void  S632C5 ::v43(){vfunc_called(this, "_ZN6S632C53v43Ev");}
void  S632C5 ::v44(){vfunc_called(this, "_ZN6S632C53v44Ev");}
void  S632C5 ::v45(){vfunc_called(this, "_ZN6S632C53v45Ev");}
void  S632C5 ::v46(){vfunc_called(this, "_ZN6S632C53v46Ev");}
void  S632C5 ::v47(){vfunc_called(this, "_ZN6S632C53v47Ev");}
void  S632C5 ::v48(){vfunc_called(this, "_ZN6S632C53v48Ev");}
void  S632C5 ::v49(){vfunc_called(this, "_ZN6S632C53v49Ev");}
void  S632C5 ::v50(){vfunc_called(this, "_ZN6S632C53v50Ev");}
void  S632C5 ::v51(){vfunc_called(this, "_ZN6S632C53v51Ev");}
void  S632C5 ::v52(){vfunc_called(this, "_ZN6S632C53v52Ev");}
void  S632C5 ::v53(){vfunc_called(this, "_ZN6S632C53v53Ev");}
void  S632C5 ::v54(){vfunc_called(this, "_ZN6S632C53v54Ev");}
void  S632C5 ::v55(){vfunc_called(this, "_ZN6S632C53v55Ev");}
void  S632C5 ::v56(){vfunc_called(this, "_ZN6S632C53v56Ev");}
void  S632C5 ::v57(){vfunc_called(this, "_ZN6S632C53v57Ev");}
void  S632C5 ::v58(){vfunc_called(this, "_ZN6S632C53v58Ev");}
void  S632C5 ::v59(){vfunc_called(this, "_ZN6S632C53v59Ev");}
void  S632C5 ::v60(){vfunc_called(this, "_ZN6S632C53v60Ev");}
void  S632C5 ::v61(){vfunc_called(this, "_ZN6S632C53v61Ev");}
void  S632C5 ::v62(){vfunc_called(this, "_ZN6S632C53v62Ev");}
void  S632C5 ::v63(){vfunc_called(this, "_ZN6S632C53v63Ev");}
void  S632C5 ::v64(){vfunc_called(this, "_ZN6S632C53v64Ev");}
void  S632C5 ::v65(){vfunc_called(this, "_ZN6S632C53v65Ev");}
void  S632C5 ::v66(){vfunc_called(this, "_ZN6S632C53v66Ev");}
void  S632C5 ::v67(){vfunc_called(this, "_ZN6S632C53v67Ev");}
void  S632C5 ::v68(){vfunc_called(this, "_ZN6S632C53v68Ev");}
S632C5 ::S632C5(){ note_ctor("S632C5", this);} // tgen

static void Test_S632C5()
{
  extern Class_Descriptor cd_S632C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S632C5, buf);
    S632C5 *dp, &lv = *(dp=new (buf) S632C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S632C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S632C5)");
    check_field_offset(lv, s632c5f0, ABISELECT(8,4), "S632C5.s632c5f0");
    check_field_offset(lv, s632c5f1, ABISELECT(16,8), "S632C5.s632c5f1");
    check_field_offset(lv, s632c5f2, ABISELECT(24,16), "S632C5.s632c5f2");
    check_field_offset(lv, s632c5f3, ABISELECT(56,32), "S632C5.s632c5f3");
    check_field_offset(lv, s632c5f4, ABISELECT(64,40), "S632C5.s632c5f4");
    check_field_offset(lv, s632c5f5, ABISELECT(72,44), "S632C5.s632c5f5");
    check_field_offset(lv, s632c5f6, ABISELECT(80,52), "S632C5.s632c5f6");
    test_class_info(&lv, &cd_S632C5);
    dp->~S632C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS632C5(Test_S632C5, "S632C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S632C5C1Ev();
extern void _ZN6S632C5D1Ev();
Name_Map name_map_S632C5[] = {
  NSPAIR(_ZN6S632C5C1Ev),
  NSPAIR(_ZN6S632C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S632C5[];
extern void _ZN6S632C5D1Ev();
extern void _ZN6S632C5D0Ev();
extern void _ZN6S632C52v5Ev();
extern void _ZN6S632C52v6Ev();
extern void _ZN6S632C52v7Ev();
extern void _ZN6S632C52v8Ev();
extern void _ZN6S632C52v9Ev();
extern void _ZN6S632C53v10Ev();
extern void _ZN6S632C53v11Ev();
extern void _ZN6S632C53v12Ev();
extern void _ZN6S632C53v13Ev();
extern void _ZN6S632C53v14Ev();
extern void _ZN6S632C53v15Ev();
extern void _ZN6S632C53v16Ev();
extern void _ZN6S632C53v17Ev();
extern void _ZN6S632C53v18Ev();
extern void _ZN6S632C53v19Ev();
extern void _ZN6S632C53v20Ev();
extern void _ZN6S632C53v21Ev();
extern void _ZN6S632C53v22Ev();
extern void _ZN6S632C53v23Ev();
extern void _ZN6S632C53v24Ev();
extern void _ZN6S632C53v25Ev();
extern void _ZN6S632C53v26Ev();
extern void _ZN6S632C53v27Ev();
extern void _ZN6S632C53v28Ev();
extern void _ZN6S632C53v29Ev();
extern void _ZN6S632C53v30Ev();
extern void _ZN6S632C53v31Ev();
extern void _ZN6S632C53v32Ev();
extern void _ZN6S632C53v33Ev();
extern void _ZN6S632C53v34Ev();
extern void _ZN6S632C53v35Ev();
extern void _ZN6S632C53v36Ev();
extern void _ZN6S632C53v37Ev();
extern void _ZN6S632C53v38Ev();
extern void _ZN6S632C53v39Ev();
extern void _ZN6S632C53v40Ev();
extern void _ZN6S632C53v41Ev();
extern void _ZN6S632C53v42Ev();
extern void _ZN6S632C53v43Ev();
extern void _ZN6S632C53v44Ev();
extern void _ZN6S632C53v45Ev();
extern void _ZN6S632C53v46Ev();
extern void _ZN6S632C53v47Ev();
extern void _ZN6S632C53v48Ev();
extern void _ZN6S632C53v49Ev();
extern void _ZN6S632C53v50Ev();
extern void _ZN6S632C53v51Ev();
extern void _ZN6S632C53v52Ev();
extern void _ZN6S632C53v53Ev();
extern void _ZN6S632C53v54Ev();
extern void _ZN6S632C53v55Ev();
extern void _ZN6S632C53v56Ev();
extern void _ZN6S632C53v57Ev();
extern void _ZN6S632C53v58Ev();
extern void _ZN6S632C53v59Ev();
extern void _ZN6S632C53v60Ev();
extern void _ZN6S632C53v61Ev();
extern void _ZN6S632C53v62Ev();
extern void _ZN6S632C53v63Ev();
extern void _ZN6S632C53v64Ev();
extern void _ZN6S632C53v65Ev();
extern void _ZN6S632C53v66Ev();
extern void _ZN6S632C53v67Ev();
extern void _ZN6S632C53v68Ev();
static  VTBL_ENTRY vtc_S632C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S632C5[0]),
  (VTBL_ENTRY)&_ZN6S632C5D1Ev,
  (VTBL_ENTRY)&_ZN6S632C5D0Ev,
  (VTBL_ENTRY)&_ZN6S632C52v5Ev,
  (VTBL_ENTRY)&_ZN6S632C52v6Ev,
  (VTBL_ENTRY)&_ZN6S632C52v7Ev,
  (VTBL_ENTRY)&_ZN6S632C52v8Ev,
  (VTBL_ENTRY)&_ZN6S632C52v9Ev,
  (VTBL_ENTRY)&_ZN6S632C53v10Ev,
  (VTBL_ENTRY)&_ZN6S632C53v11Ev,
  (VTBL_ENTRY)&_ZN6S632C53v12Ev,
  (VTBL_ENTRY)&_ZN6S632C53v13Ev,
  (VTBL_ENTRY)&_ZN6S632C53v14Ev,
  (VTBL_ENTRY)&_ZN6S632C53v15Ev,
  (VTBL_ENTRY)&_ZN6S632C53v16Ev,
  (VTBL_ENTRY)&_ZN6S632C53v17Ev,
  (VTBL_ENTRY)&_ZN6S632C53v18Ev,
  (VTBL_ENTRY)&_ZN6S632C53v19Ev,
  (VTBL_ENTRY)&_ZN6S632C53v20Ev,
  (VTBL_ENTRY)&_ZN6S632C53v21Ev,
  (VTBL_ENTRY)&_ZN6S632C53v22Ev,
  (VTBL_ENTRY)&_ZN6S632C53v23Ev,
  (VTBL_ENTRY)&_ZN6S632C53v24Ev,
  (VTBL_ENTRY)&_ZN6S632C53v25Ev,
  (VTBL_ENTRY)&_ZN6S632C53v26Ev,
  (VTBL_ENTRY)&_ZN6S632C53v27Ev,
  (VTBL_ENTRY)&_ZN6S632C53v28Ev,
  (VTBL_ENTRY)&_ZN6S632C53v29Ev,
  (VTBL_ENTRY)&_ZN6S632C53v30Ev,
  (VTBL_ENTRY)&_ZN6S632C53v31Ev,
  (VTBL_ENTRY)&_ZN6S632C53v32Ev,
  (VTBL_ENTRY)&_ZN6S632C53v33Ev,
  (VTBL_ENTRY)&_ZN6S632C53v34Ev,
  (VTBL_ENTRY)&_ZN6S632C53v35Ev,
  (VTBL_ENTRY)&_ZN6S632C53v36Ev,
  (VTBL_ENTRY)&_ZN6S632C53v37Ev,
  (VTBL_ENTRY)&_ZN6S632C53v38Ev,
  (VTBL_ENTRY)&_ZN6S632C53v39Ev,
  (VTBL_ENTRY)&_ZN6S632C53v40Ev,
  (VTBL_ENTRY)&_ZN6S632C53v41Ev,
  (VTBL_ENTRY)&_ZN6S632C53v42Ev,
  (VTBL_ENTRY)&_ZN6S632C53v43Ev,
  (VTBL_ENTRY)&_ZN6S632C53v44Ev,
  (VTBL_ENTRY)&_ZN6S632C53v45Ev,
  (VTBL_ENTRY)&_ZN6S632C53v46Ev,
  (VTBL_ENTRY)&_ZN6S632C53v47Ev,
  (VTBL_ENTRY)&_ZN6S632C53v48Ev,
  (VTBL_ENTRY)&_ZN6S632C53v49Ev,
  (VTBL_ENTRY)&_ZN6S632C53v50Ev,
  (VTBL_ENTRY)&_ZN6S632C53v51Ev,
  (VTBL_ENTRY)&_ZN6S632C53v52Ev,
  (VTBL_ENTRY)&_ZN6S632C53v53Ev,
  (VTBL_ENTRY)&_ZN6S632C53v54Ev,
  (VTBL_ENTRY)&_ZN6S632C53v55Ev,
  (VTBL_ENTRY)&_ZN6S632C53v56Ev,
  (VTBL_ENTRY)&_ZN6S632C53v57Ev,
  (VTBL_ENTRY)&_ZN6S632C53v58Ev,
  (VTBL_ENTRY)&_ZN6S632C53v59Ev,
  (VTBL_ENTRY)&_ZN6S632C53v60Ev,
  (VTBL_ENTRY)&_ZN6S632C53v61Ev,
  (VTBL_ENTRY)&_ZN6S632C53v62Ev,
  (VTBL_ENTRY)&_ZN6S632C53v63Ev,
  (VTBL_ENTRY)&_ZN6S632C53v64Ev,
  (VTBL_ENTRY)&_ZN6S632C53v65Ev,
  (VTBL_ENTRY)&_ZN6S632C53v66Ev,
  (VTBL_ENTRY)&_ZN6S632C53v67Ev,
  (VTBL_ENTRY)&_ZN6S632C53v68Ev,
};
extern VTBL_ENTRY _ZTI6S632C5[];
extern  VTBL_ENTRY _ZTV6S632C5[];
Class_Descriptor cd_S632C5 = {  "S632C5", // class name
  0,0,//no base classes
  &(vtc_S632C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S632C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S632C5),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S632C4  : S632C5 {
  void *s632c4f0;
  ::S273C7_nt s632c4f1;
  int s632c4f2[5];
  unsigned int s632c4f3:1;
  unsigned int s632c4f4:1;
  unsigned int s632c4f5:1;
  unsigned int s632c4f6:1;
  unsigned int s632c4f7:1;
  ::S273C21 s632c4f8;
  ::S273C17 s632c4f9;
  unsigned int s632c4f10:1;
  int s632c4f11[2];
  void *s632c4f12;
  int s632c4f13[3];
  virtual  ~S632C4(); // _ZN6S632C4D1Ev
  virtual void  v69(); // _ZN6S632C43v69Ev
  virtual void  v70(); // _ZN6S632C43v70Ev
  virtual void  v71(); // _ZN6S632C43v71Ev
  virtual void  v72(); // _ZN6S632C43v72Ev
  virtual void  v73(); // _ZN6S632C43v73Ev
  virtual void  v74(); // _ZN6S632C43v74Ev
  virtual void  v75(); // _ZN6S632C43v75Ev
  virtual void  v76(); // _ZN6S632C43v76Ev
  virtual void  v77(); // _ZN6S632C43v77Ev
  virtual void  v78(); // _ZN6S632C43v78Ev
  virtual void  v79(); // _ZN6S632C43v79Ev
  virtual void  v80(); // _ZN6S632C43v80Ev
  virtual void  v81(); // _ZN6S632C43v81Ev
  S632C4(); // tgen
};
//SIG(-1 S632C4) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S632C4 ::~S632C4(){ note_dtor("S632C4", this);}
void  S632C4 ::v69(){vfunc_called(this, "_ZN6S632C43v69Ev");}
void  S632C4 ::v70(){vfunc_called(this, "_ZN6S632C43v70Ev");}
void  S632C4 ::v71(){vfunc_called(this, "_ZN6S632C43v71Ev");}
void  S632C4 ::v72(){vfunc_called(this, "_ZN6S632C43v72Ev");}
void  S632C4 ::v73(){vfunc_called(this, "_ZN6S632C43v73Ev");}
void  S632C4 ::v74(){vfunc_called(this, "_ZN6S632C43v74Ev");}
void  S632C4 ::v75(){vfunc_called(this, "_ZN6S632C43v75Ev");}
void  S632C4 ::v76(){vfunc_called(this, "_ZN6S632C43v76Ev");}
void  S632C4 ::v77(){vfunc_called(this, "_ZN6S632C43v77Ev");}
void  S632C4 ::v78(){vfunc_called(this, "_ZN6S632C43v78Ev");}
void  S632C4 ::v79(){vfunc_called(this, "_ZN6S632C43v79Ev");}
void  S632C4 ::v80(){vfunc_called(this, "_ZN6S632C43v80Ev");}
void  S632C4 ::v81(){vfunc_called(this, "_ZN6S632C43v81Ev");}
S632C4 ::S632C4(){ note_ctor("S632C4", this);} // tgen

static void Test_S632C4()
{
  extern Class_Descriptor cd_S632C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S632C4, buf);
    S632C4 *dp, &lv = *(dp=new (buf) S632C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S632C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S632C4)");
    check_base_class_offset(lv, (S632C5*), 0, "S632C4");
    check_field_offset(lv, s632c4f0, ABISELECT(96,60), "S632C4.s632c4f0");
    check_field_offset(lv, s632c4f1, ABISELECT(104,64), "S632C4.s632c4f1");
    check_field_offset(lv, s632c4f2, ABISELECT(112,72), "S632C4.s632c4f2");
    set_bf_and_test(lv, s632c4f3, ABISELECT(132,92), 0, 1, 1, "S632C4");
    set_bf_and_test(lv, s632c4f4, ABISELECT(132,92), 1, 1, 1, "S632C4");
    set_bf_and_test(lv, s632c4f5, ABISELECT(132,92), 2, 1, 1, "S632C4");
    set_bf_and_test(lv, s632c4f6, ABISELECT(132,92), 3, 1, 1, "S632C4");
    set_bf_and_test(lv, s632c4f7, ABISELECT(132,92), 4, 1, 1, "S632C4");
    check_field_offset(lv, s632c4f8, ABISELECT(136,96), "S632C4.s632c4f8");
    check_field_offset(lv, s632c4f9, ABISELECT(152,108), "S632C4.s632c4f9");
    set_bf_and_test(lv, s632c4f10, ABISELECT(168,120), 0, 1, 1, "S632C4");
    check_field_offset(lv, s632c4f11, ABISELECT(172,124), "S632C4.s632c4f11");
    check_field_offset(lv, s632c4f12, ABISELECT(184,132), "S632C4.s632c4f12");
    check_field_offset(lv, s632c4f13, ABISELECT(192,136), "S632C4.s632c4f13");
    test_class_info(&lv, &cd_S632C4);
    dp->~S632C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS632C4(Test_S632C4, "S632C4", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN6S632C4C1Ev();
extern void _ZN6S632C4D1Ev();
Name_Map name_map_S632C4[] = {
  NSPAIR(_ZN6S632C4C1Ev),
  NSPAIR(_ZN6S632C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S632C5;
extern VTBL_ENTRY _ZTI6S632C5[];
extern  VTBL_ENTRY _ZTV6S632C5[];
static Base_Class bases_S632C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S632C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S632C4[];
extern void _ZN6S632C4D1Ev();
extern void _ZN6S632C4D0Ev();
extern void _ZN6S632C52v5Ev();
extern void _ZN6S632C52v6Ev();
extern void _ZN6S632C52v7Ev();
extern void _ZN6S632C52v8Ev();
extern void _ZN6S632C52v9Ev();
extern void _ZN6S632C53v10Ev();
extern void _ZN6S632C53v11Ev();
extern void _ZN6S632C53v12Ev();
extern void _ZN6S632C53v13Ev();
extern void _ZN6S632C53v14Ev();
extern void _ZN6S632C53v15Ev();
extern void _ZN6S632C53v16Ev();
extern void _ZN6S632C53v17Ev();
extern void _ZN6S632C53v18Ev();
extern void _ZN6S632C53v19Ev();
extern void _ZN6S632C53v20Ev();
extern void _ZN6S632C53v21Ev();
extern void _ZN6S632C53v22Ev();
extern void _ZN6S632C53v23Ev();
extern void _ZN6S632C53v24Ev();
extern void _ZN6S632C53v25Ev();
extern void _ZN6S632C53v26Ev();
extern void _ZN6S632C53v27Ev();
extern void _ZN6S632C53v28Ev();
extern void _ZN6S632C53v29Ev();
extern void _ZN6S632C53v30Ev();
extern void _ZN6S632C53v31Ev();
extern void _ZN6S632C53v32Ev();
extern void _ZN6S632C53v33Ev();
extern void _ZN6S632C53v34Ev();
extern void _ZN6S632C53v35Ev();
extern void _ZN6S632C53v36Ev();
extern void _ZN6S632C53v37Ev();
extern void _ZN6S632C53v38Ev();
extern void _ZN6S632C53v39Ev();
extern void _ZN6S632C53v40Ev();
extern void _ZN6S632C53v41Ev();
extern void _ZN6S632C53v42Ev();
extern void _ZN6S632C53v43Ev();
extern void _ZN6S632C53v44Ev();
extern void _ZN6S632C53v45Ev();
extern void _ZN6S632C53v46Ev();
extern void _ZN6S632C53v47Ev();
extern void _ZN6S632C53v48Ev();
extern void _ZN6S632C53v49Ev();
extern void _ZN6S632C53v50Ev();
extern void _ZN6S632C53v51Ev();
extern void _ZN6S632C53v52Ev();
extern void _ZN6S632C53v53Ev();
extern void _ZN6S632C53v54Ev();
extern void _ZN6S632C53v55Ev();
extern void _ZN6S632C53v56Ev();
extern void _ZN6S632C53v57Ev();
extern void _ZN6S632C53v58Ev();
extern void _ZN6S632C53v59Ev();
extern void _ZN6S632C53v60Ev();
extern void _ZN6S632C53v61Ev();
extern void _ZN6S632C53v62Ev();
extern void _ZN6S632C53v63Ev();
extern void _ZN6S632C53v64Ev();
extern void _ZN6S632C53v65Ev();
extern void _ZN6S632C53v66Ev();
extern void _ZN6S632C53v67Ev();
extern void _ZN6S632C53v68Ev();
extern void _ZN6S632C43v69Ev();
extern void _ZN6S632C43v70Ev();
extern void _ZN6S632C43v71Ev();
extern void _ZN6S632C43v72Ev();
extern void _ZN6S632C43v73Ev();
extern void _ZN6S632C43v74Ev();
extern void _ZN6S632C43v75Ev();
extern void _ZN6S632C43v76Ev();
extern void _ZN6S632C43v77Ev();
extern void _ZN6S632C43v78Ev();
extern void _ZN6S632C43v79Ev();
extern void _ZN6S632C43v80Ev();
extern void _ZN6S632C43v81Ev();
static  VTBL_ENTRY vtc_S632C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S632C4[0]),
  (VTBL_ENTRY)&_ZN6S632C4D1Ev,
  (VTBL_ENTRY)&_ZN6S632C4D0Ev,
  (VTBL_ENTRY)&_ZN6S632C52v5Ev,
  (VTBL_ENTRY)&_ZN6S632C52v6Ev,
  (VTBL_ENTRY)&_ZN6S632C52v7Ev,
  (VTBL_ENTRY)&_ZN6S632C52v8Ev,
  (VTBL_ENTRY)&_ZN6S632C52v9Ev,
  (VTBL_ENTRY)&_ZN6S632C53v10Ev,
  (VTBL_ENTRY)&_ZN6S632C53v11Ev,
  (VTBL_ENTRY)&_ZN6S632C53v12Ev,
  (VTBL_ENTRY)&_ZN6S632C53v13Ev,
  (VTBL_ENTRY)&_ZN6S632C53v14Ev,
  (VTBL_ENTRY)&_ZN6S632C53v15Ev,
  (VTBL_ENTRY)&_ZN6S632C53v16Ev,
  (VTBL_ENTRY)&_ZN6S632C53v17Ev,
  (VTBL_ENTRY)&_ZN6S632C53v18Ev,
  (VTBL_ENTRY)&_ZN6S632C53v19Ev,
  (VTBL_ENTRY)&_ZN6S632C53v20Ev,
  (VTBL_ENTRY)&_ZN6S632C53v21Ev,
  (VTBL_ENTRY)&_ZN6S632C53v22Ev,
  (VTBL_ENTRY)&_ZN6S632C53v23Ev,
  (VTBL_ENTRY)&_ZN6S632C53v24Ev,
  (VTBL_ENTRY)&_ZN6S632C53v25Ev,
  (VTBL_ENTRY)&_ZN6S632C53v26Ev,
  (VTBL_ENTRY)&_ZN6S632C53v27Ev,
  (VTBL_ENTRY)&_ZN6S632C53v28Ev,
  (VTBL_ENTRY)&_ZN6S632C53v29Ev,
  (VTBL_ENTRY)&_ZN6S632C53v30Ev,
  (VTBL_ENTRY)&_ZN6S632C53v31Ev,
  (VTBL_ENTRY)&_ZN6S632C53v32Ev,
  (VTBL_ENTRY)&_ZN6S632C53v33Ev,
  (VTBL_ENTRY)&_ZN6S632C53v34Ev,
  (VTBL_ENTRY)&_ZN6S632C53v35Ev,
  (VTBL_ENTRY)&_ZN6S632C53v36Ev,
  (VTBL_ENTRY)&_ZN6S632C53v37Ev,
  (VTBL_ENTRY)&_ZN6S632C53v38Ev,
  (VTBL_ENTRY)&_ZN6S632C53v39Ev,
  (VTBL_ENTRY)&_ZN6S632C53v40Ev,
  (VTBL_ENTRY)&_ZN6S632C53v41Ev,
  (VTBL_ENTRY)&_ZN6S632C53v42Ev,
  (VTBL_ENTRY)&_ZN6S632C53v43Ev,
  (VTBL_ENTRY)&_ZN6S632C53v44Ev,
  (VTBL_ENTRY)&_ZN6S632C53v45Ev,
  (VTBL_ENTRY)&_ZN6S632C53v46Ev,
  (VTBL_ENTRY)&_ZN6S632C53v47Ev,
  (VTBL_ENTRY)&_ZN6S632C53v48Ev,
  (VTBL_ENTRY)&_ZN6S632C53v49Ev,
  (VTBL_ENTRY)&_ZN6S632C53v50Ev,
  (VTBL_ENTRY)&_ZN6S632C53v51Ev,
  (VTBL_ENTRY)&_ZN6S632C53v52Ev,
  (VTBL_ENTRY)&_ZN6S632C53v53Ev,
  (VTBL_ENTRY)&_ZN6S632C53v54Ev,
  (VTBL_ENTRY)&_ZN6S632C53v55Ev,
  (VTBL_ENTRY)&_ZN6S632C53v56Ev,
  (VTBL_ENTRY)&_ZN6S632C53v57Ev,
  (VTBL_ENTRY)&_ZN6S632C53v58Ev,
  (VTBL_ENTRY)&_ZN6S632C53v59Ev,
  (VTBL_ENTRY)&_ZN6S632C53v60Ev,
  (VTBL_ENTRY)&_ZN6S632C53v61Ev,
  (VTBL_ENTRY)&_ZN6S632C53v62Ev,
  (VTBL_ENTRY)&_ZN6S632C53v63Ev,
  (VTBL_ENTRY)&_ZN6S632C53v64Ev,
  (VTBL_ENTRY)&_ZN6S632C53v65Ev,
  (VTBL_ENTRY)&_ZN6S632C53v66Ev,
  (VTBL_ENTRY)&_ZN6S632C53v67Ev,
  (VTBL_ENTRY)&_ZN6S632C53v68Ev,
  (VTBL_ENTRY)&_ZN6S632C43v69Ev,
  (VTBL_ENTRY)&_ZN6S632C43v70Ev,
  (VTBL_ENTRY)&_ZN6S632C43v71Ev,
  (VTBL_ENTRY)&_ZN6S632C43v72Ev,
  (VTBL_ENTRY)&_ZN6S632C43v73Ev,
  (VTBL_ENTRY)&_ZN6S632C43v74Ev,
  (VTBL_ENTRY)&_ZN6S632C43v75Ev,
  (VTBL_ENTRY)&_ZN6S632C43v76Ev,
  (VTBL_ENTRY)&_ZN6S632C43v77Ev,
  (VTBL_ENTRY)&_ZN6S632C43v78Ev,
  (VTBL_ENTRY)&_ZN6S632C43v79Ev,
  (VTBL_ENTRY)&_ZN6S632C43v80Ev,
  (VTBL_ENTRY)&_ZN6S632C43v81Ev,
};
extern VTBL_ENTRY _ZTI6S632C4[];
extern  VTBL_ENTRY _ZTV6S632C4[];
Class_Descriptor cd_S632C4 = {  "S632C4", // class name
  bases_S632C4, 1,
  &(vtc_S632C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI6S632C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S632C4),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S632C13  {
  int s632c13f0[3];
  void  mf632c13(); // _ZN7S632C138mf632c13Ev
};
//SIG(-1 S632C13) C1{ m Fi[3]}


void  S632C13 ::mf632c13(){}

static void Test_S632C13()
{
  {
    init_simple_test("S632C13");
    S632C13 lv;
    check2(sizeof(lv), 12, "sizeof(S632C13)");
    check2(__alignof__(lv), 4, "__alignof__(S632C13)");
    check_field_offset(lv, s632c13f0, 0, "S632C13.s632c13f0");
  }
}
static Arrange_To_Call_Me vS632C13(Test_S632C13, "S632C13", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S632C3  : S632C4 {
  unsigned int s632c3f0:1;
  unsigned int s632c3f1:1;
  unsigned int s632c3f2:1;
  unsigned int s632c3f3:1;
  ::S664C12_nt s632c3f4;
  char s632c3f5[2];
  ::S273C7_nt s632c3f6;
  ::S632C13 s632c3f7;
  ::S273C7_nt s632c3f8;
  virtual  ~S632C3(); // _ZN6S632C3D1Ev
  virtual void  v82(); // _ZN6S632C33v82Ev
  virtual void  v83(); // _ZN6S632C33v83Ev
  virtual void  v84(); // _ZN6S632C33v84Ev
  virtual void  v85(); // _ZN6S632C33v85Ev
  virtual void  v86(); // _ZN6S632C33v86Ev
  virtual void  v87(); // _ZN6S632C33v87Ev
  virtual void  v88(); // _ZN6S632C33v88Ev
  S632C3(); // tgen
};
//SIG(-1 S632C3) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S632C3 ::~S632C3(){ note_dtor("S632C3", this);}
void  S632C3 ::v82(){vfunc_called(this, "_ZN6S632C33v82Ev");}
void  S632C3 ::v83(){vfunc_called(this, "_ZN6S632C33v83Ev");}
void  S632C3 ::v84(){vfunc_called(this, "_ZN6S632C33v84Ev");}
void  S632C3 ::v85(){vfunc_called(this, "_ZN6S632C33v85Ev");}
void  S632C3 ::v86(){vfunc_called(this, "_ZN6S632C33v86Ev");}
void  S632C3 ::v87(){vfunc_called(this, "_ZN6S632C33v87Ev");}
void  S632C3 ::v88(){vfunc_called(this, "_ZN6S632C33v88Ev");}
S632C3 ::S632C3(){ note_ctor("S632C3", this);} // tgen

static void Test_S632C3()
{
  extern Class_Descriptor cd_S632C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S632C3, buf);
    S632C3 *dp, &lv = *(dp=new (buf) S632C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S632C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S632C3)");
    check_base_class_offset(lv, (S632C5*)(S632C4*), 0, "S632C3");
    check_base_class_offset(lv, (S632C4*), 0, "S632C3");
    set_bf_and_test(lv, s632c3f0, ABISELECT(204,148), 0, 1, 1, "S632C3");
    set_bf_and_test(lv, s632c3f1, ABISELECT(204,148), 1, 1, 1, "S632C3");
    set_bf_and_test(lv, s632c3f2, ABISELECT(204,148), 2, 1, 1, "S632C3");
    set_bf_and_test(lv, s632c3f3, ABISELECT(204,148), 3, 1, 1, "S632C3");
    check_field_offset(lv, s632c3f4, ABISELECT(208,152), "S632C3.s632c3f4");
    check_field_offset(lv, s632c3f5, ABISELECT(220,164), "S632C3.s632c3f5");
    check_field_offset(lv, s632c3f6, ABISELECT(224,168), "S632C3.s632c3f6");
    check_field_offset(lv, s632c3f7, ABISELECT(232,176), "S632C3.s632c3f7");
    check_field_offset(lv, s632c3f8, ABISELECT(244,188), "S632C3.s632c3f8");
    test_class_info(&lv, &cd_S632C3);
    dp->~S632C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS632C3(Test_S632C3, "S632C3", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S632C3C1Ev();
extern void _ZN6S632C3D1Ev();
Name_Map name_map_S632C3[] = {
  NSPAIR(_ZN6S632C3C1Ev),
  NSPAIR(_ZN6S632C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S632C5;
extern VTBL_ENTRY _ZTI6S632C5[];
extern  VTBL_ENTRY _ZTV6S632C5[];
extern Class_Descriptor cd_S632C4;
extern VTBL_ENTRY _ZTI6S632C4[];
extern  VTBL_ENTRY _ZTV6S632C4[];
static Base_Class bases_S632C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S632C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S632C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S632C3[];
extern void _ZN6S632C3D1Ev();
extern void _ZN6S632C3D0Ev();
extern void _ZN6S632C52v5Ev();
extern void _ZN6S632C52v6Ev();
extern void _ZN6S632C52v7Ev();
extern void _ZN6S632C52v8Ev();
extern void _ZN6S632C52v9Ev();
extern void _ZN6S632C53v10Ev();
extern void _ZN6S632C53v11Ev();
extern void _ZN6S632C53v12Ev();
extern void _ZN6S632C53v13Ev();
extern void _ZN6S632C53v14Ev();
extern void _ZN6S632C53v15Ev();
extern void _ZN6S632C53v16Ev();
extern void _ZN6S632C53v17Ev();
extern void _ZN6S632C53v18Ev();
extern void _ZN6S632C53v19Ev();
extern void _ZN6S632C53v20Ev();
extern void _ZN6S632C53v21Ev();
extern void _ZN6S632C53v22Ev();
extern void _ZN6S632C53v23Ev();
extern void _ZN6S632C53v24Ev();
extern void _ZN6S632C53v25Ev();
extern void _ZN6S632C53v26Ev();
extern void _ZN6S632C53v27Ev();
extern void _ZN6S632C53v28Ev();
extern void _ZN6S632C53v29Ev();
extern void _ZN6S632C53v30Ev();
extern void _ZN6S632C53v31Ev();
extern void _ZN6S632C53v32Ev();
extern void _ZN6S632C53v33Ev();
extern void _ZN6S632C53v34Ev();
extern void _ZN6S632C53v35Ev();
extern void _ZN6S632C53v36Ev();
extern void _ZN6S632C53v37Ev();
extern void _ZN6S632C53v38Ev();
extern void _ZN6S632C53v39Ev();
extern void _ZN6S632C53v40Ev();
extern void _ZN6S632C53v41Ev();
extern void _ZN6S632C53v42Ev();
extern void _ZN6S632C53v43Ev();
extern void _ZN6S632C53v44Ev();
extern void _ZN6S632C53v45Ev();
extern void _ZN6S632C53v46Ev();
extern void _ZN6S632C53v47Ev();
extern void _ZN6S632C53v48Ev();
extern void _ZN6S632C53v49Ev();
extern void _ZN6S632C53v50Ev();
extern void _ZN6S632C53v51Ev();
extern void _ZN6S632C53v52Ev();
extern void _ZN6S632C53v53Ev();
extern void _ZN6S632C53v54Ev();
extern void _ZN6S632C53v55Ev();
extern void _ZN6S632C53v56Ev();
extern void _ZN6S632C53v57Ev();
extern void _ZN6S632C53v58Ev();
extern void _ZN6S632C53v59Ev();
extern void _ZN6S632C53v60Ev();
extern void _ZN6S632C53v61Ev();
extern void _ZN6S632C53v62Ev();
extern void _ZN6S632C53v63Ev();
extern void _ZN6S632C53v64Ev();
extern void _ZN6S632C53v65Ev();
extern void _ZN6S632C53v66Ev();
extern void _ZN6S632C53v67Ev();
extern void _ZN6S632C53v68Ev();
extern void _ZN6S632C43v69Ev();
extern void _ZN6S632C43v70Ev();
extern void _ZN6S632C43v71Ev();
extern void _ZN6S632C43v72Ev();
extern void _ZN6S632C43v73Ev();
extern void _ZN6S632C43v74Ev();
extern void _ZN6S632C43v75Ev();
extern void _ZN6S632C43v76Ev();
extern void _ZN6S632C43v77Ev();
extern void _ZN6S632C43v78Ev();
extern void _ZN6S632C43v79Ev();
extern void _ZN6S632C43v80Ev();
extern void _ZN6S632C43v81Ev();
extern void _ZN6S632C33v82Ev();
extern void _ZN6S632C33v83Ev();
extern void _ZN6S632C33v84Ev();
extern void _ZN6S632C33v85Ev();
extern void _ZN6S632C33v86Ev();
extern void _ZN6S632C33v87Ev();
extern void _ZN6S632C33v88Ev();
static  VTBL_ENTRY vtc_S632C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S632C3[0]),
  (VTBL_ENTRY)&_ZN6S632C3D1Ev,
  (VTBL_ENTRY)&_ZN6S632C3D0Ev,
  (VTBL_ENTRY)&_ZN6S632C52v5Ev,
  (VTBL_ENTRY)&_ZN6S632C52v6Ev,
  (VTBL_ENTRY)&_ZN6S632C52v7Ev,
  (VTBL_ENTRY)&_ZN6S632C52v8Ev,
  (VTBL_ENTRY)&_ZN6S632C52v9Ev,
  (VTBL_ENTRY)&_ZN6S632C53v10Ev,
  (VTBL_ENTRY)&_ZN6S632C53v11Ev,
  (VTBL_ENTRY)&_ZN6S632C53v12Ev,
  (VTBL_ENTRY)&_ZN6S632C53v13Ev,
  (VTBL_ENTRY)&_ZN6S632C53v14Ev,
  (VTBL_ENTRY)&_ZN6S632C53v15Ev,
  (VTBL_ENTRY)&_ZN6S632C53v16Ev,
  (VTBL_ENTRY)&_ZN6S632C53v17Ev,
  (VTBL_ENTRY)&_ZN6S632C53v18Ev,
  (VTBL_ENTRY)&_ZN6S632C53v19Ev,
  (VTBL_ENTRY)&_ZN6S632C53v20Ev,
  (VTBL_ENTRY)&_ZN6S632C53v21Ev,
  (VTBL_ENTRY)&_ZN6S632C53v22Ev,
  (VTBL_ENTRY)&_ZN6S632C53v23Ev,
  (VTBL_ENTRY)&_ZN6S632C53v24Ev,
  (VTBL_ENTRY)&_ZN6S632C53v25Ev,
  (VTBL_ENTRY)&_ZN6S632C53v26Ev,
  (VTBL_ENTRY)&_ZN6S632C53v27Ev,
  (VTBL_ENTRY)&_ZN6S632C53v28Ev,
  (VTBL_ENTRY)&_ZN6S632C53v29Ev,
  (VTBL_ENTRY)&_ZN6S632C53v30Ev,
  (VTBL_ENTRY)&_ZN6S632C53v31Ev,
  (VTBL_ENTRY)&_ZN6S632C53v32Ev,
  (VTBL_ENTRY)&_ZN6S632C53v33Ev,
  (VTBL_ENTRY)&_ZN6S632C53v34Ev,
  (VTBL_ENTRY)&_ZN6S632C53v35Ev,
  (VTBL_ENTRY)&_ZN6S632C53v36Ev,
  (VTBL_ENTRY)&_ZN6S632C53v37Ev,
  (VTBL_ENTRY)&_ZN6S632C53v38Ev,
  (VTBL_ENTRY)&_ZN6S632C53v39Ev,
  (VTBL_ENTRY)&_ZN6S632C53v40Ev,
  (VTBL_ENTRY)&_ZN6S632C53v41Ev,
  (VTBL_ENTRY)&_ZN6S632C53v42Ev,
  (VTBL_ENTRY)&_ZN6S632C53v43Ev,
  (VTBL_ENTRY)&_ZN6S632C53v44Ev,
  (VTBL_ENTRY)&_ZN6S632C53v45Ev,
  (VTBL_ENTRY)&_ZN6S632C53v46Ev,
  (VTBL_ENTRY)&_ZN6S632C53v47Ev,
  (VTBL_ENTRY)&_ZN6S632C53v48Ev,
  (VTBL_ENTRY)&_ZN6S632C53v49Ev,
  (VTBL_ENTRY)&_ZN6S632C53v50Ev,
  (VTBL_ENTRY)&_ZN6S632C53v51Ev,
  (VTBL_ENTRY)&_ZN6S632C53v52Ev,
  (VTBL_ENTRY)&_ZN6S632C53v53Ev,
  (VTBL_ENTRY)&_ZN6S632C53v54Ev,
  (VTBL_ENTRY)&_ZN6S632C53v55Ev,
  (VTBL_ENTRY)&_ZN6S632C53v56Ev,
  (VTBL_ENTRY)&_ZN6S632C53v57Ev,
  (VTBL_ENTRY)&_ZN6S632C53v58Ev,
  (VTBL_ENTRY)&_ZN6S632C53v59Ev,
  (VTBL_ENTRY)&_ZN6S632C53v60Ev,
  (VTBL_ENTRY)&_ZN6S632C53v61Ev,
  (VTBL_ENTRY)&_ZN6S632C53v62Ev,
  (VTBL_ENTRY)&_ZN6S632C53v63Ev,
  (VTBL_ENTRY)&_ZN6S632C53v64Ev,
  (VTBL_ENTRY)&_ZN6S632C53v65Ev,
  (VTBL_ENTRY)&_ZN6S632C53v66Ev,
  (VTBL_ENTRY)&_ZN6S632C53v67Ev,
  (VTBL_ENTRY)&_ZN6S632C53v68Ev,
  (VTBL_ENTRY)&_ZN6S632C43v69Ev,
  (VTBL_ENTRY)&_ZN6S632C43v70Ev,
  (VTBL_ENTRY)&_ZN6S632C43v71Ev,
  (VTBL_ENTRY)&_ZN6S632C43v72Ev,
  (VTBL_ENTRY)&_ZN6S632C43v73Ev,
  (VTBL_ENTRY)&_ZN6S632C43v74Ev,
  (VTBL_ENTRY)&_ZN6S632C43v75Ev,
  (VTBL_ENTRY)&_ZN6S632C43v76Ev,
  (VTBL_ENTRY)&_ZN6S632C43v77Ev,
  (VTBL_ENTRY)&_ZN6S632C43v78Ev,
  (VTBL_ENTRY)&_ZN6S632C43v79Ev,
  (VTBL_ENTRY)&_ZN6S632C43v80Ev,
  (VTBL_ENTRY)&_ZN6S632C43v81Ev,
  (VTBL_ENTRY)&_ZN6S632C33v82Ev,
  (VTBL_ENTRY)&_ZN6S632C33v83Ev,
  (VTBL_ENTRY)&_ZN6S632C33v84Ev,
  (VTBL_ENTRY)&_ZN6S632C33v85Ev,
  (VTBL_ENTRY)&_ZN6S632C33v86Ev,
  (VTBL_ENTRY)&_ZN6S632C33v87Ev,
  (VTBL_ENTRY)&_ZN6S632C33v88Ev,
};
extern VTBL_ENTRY _ZTI6S632C3[];
extern  VTBL_ENTRY _ZTV6S632C3[];
Class_Descriptor cd_S632C3 = {  "S632C3", // class name
  bases_S632C3, 2,
  &(vtc_S632C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S632C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S632C3),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S632C14_nt  {
  int s632c14f0[3];
};
//SIG(-1 S632C14_nt) C1{ Fi[3]}



//skip512 S632C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S632C17_nt  {
  void *s632c17f0;
  ::S273C7_nt s632c17f1;
  void  mf632c17(); // _ZN10S632C17_nt8mf632c17Ev
};
//SIG(-1 S632C17_nt) C1{ m Fp FC2{ m Fi[2]}}


void  S632C17_nt ::mf632c17(){}

//skip512 S632C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S632C2  : S632C3 {
  unsigned int s632c2f0:1;
  unsigned int s632c2f1:1;
  unsigned int s632c2f2:1;
  unsigned int s632c2f3:1;
  unsigned int s632c2f4:1;
  unsigned int s632c2f5:1;
  unsigned int s632c2f6:1;
  unsigned int s632c2f7:1;
  unsigned int s632c2f8:1;
  ::S632C14_nt s632c2f9;
  ::S632C14_nt s632c2f10;
  ::S273C13 s632c2f11;
  int s632c2f12[2];
  ::S632C13 s632c2f13;
  int s632c2f14;
  ::S632C13 s632c2f15;
  ::S632C17_nt s632c2f16;
  virtual  ~S632C2(); // _ZN6S632C2D1Ev
  virtual void  v89(); // _ZN6S632C23v89Ev
  virtual void  v90(); // _ZN6S632C23v90Ev
  virtual void  v91(); // _ZN6S632C23v91Ev
  S632C2(); // tgen
};
//SIG(-1 S632C2) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC13{ Fi[3]} FC13 FC14{ BC15{ BC8}} Fi[2] FC12 Fi FC12 FC16{ m Fp FC5}}


 S632C2 ::~S632C2(){ note_dtor("S632C2", this);}
void  S632C2 ::v89(){vfunc_called(this, "_ZN6S632C23v89Ev");}
void  S632C2 ::v90(){vfunc_called(this, "_ZN6S632C23v90Ev");}
void  S632C2 ::v91(){vfunc_called(this, "_ZN6S632C23v91Ev");}
S632C2 ::S632C2(){ note_ctor("S632C2", this);} // tgen

static void Test_S632C2()
{
  extern Class_Descriptor cd_S632C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,72)];
    init_test(&cd_S632C2, buf);
    S632C2 *dp, &lv = *(dp=new (buf) S632C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,284), "sizeof(S632C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S632C2)");
    check_base_class_offset(lv, (S632C5*)(S632C4*)(S632C3*), 0, "S632C2");
    check_base_class_offset(lv, (S632C4*)(S632C3*), 0, "S632C2");
    check_base_class_offset(lv, (S632C3*), 0, "S632C2");
    set_bf_and_test(lv, s632c2f0, ABISELECT(252,196), 0, 1, 1, "S632C2");
    set_bf_and_test(lv, s632c2f1, ABISELECT(252,196), 1, 1, 1, "S632C2");
    set_bf_and_test(lv, s632c2f2, ABISELECT(252,196), 2, 1, 1, "S632C2");
    set_bf_and_test(lv, s632c2f3, ABISELECT(252,196), 3, 1, 1, "S632C2");
    set_bf_and_test(lv, s632c2f4, ABISELECT(252,196), 4, 1, 1, "S632C2");
    set_bf_and_test(lv, s632c2f5, ABISELECT(252,196), 5, 1, 1, "S632C2");
    set_bf_and_test(lv, s632c2f6, ABISELECT(252,196), 6, 1, 1, "S632C2");
    set_bf_and_test(lv, s632c2f7, ABISELECT(252,196), 7, 1, 1, "S632C2");
    set_bf_and_test(lv, s632c2f8, ABISELECT(253,197), 0, 1, 1, "S632C2");
    check_field_offset(lv, s632c2f9, ABISELECT(256,200), "S632C2.s632c2f9");
    check_field_offset(lv, s632c2f10, ABISELECT(268,212), "S632C2.s632c2f10");
    check_field_offset(lv, s632c2f11, ABISELECT(280,224), "S632C2.s632c2f11");
    check_field_offset(lv, s632c2f12, ABISELECT(296,236), "S632C2.s632c2f12");
    check_field_offset(lv, s632c2f13, ABISELECT(304,244), "S632C2.s632c2f13");
    check_field_offset(lv, s632c2f14, ABISELECT(316,256), "S632C2.s632c2f14");
    check_field_offset(lv, s632c2f15, ABISELECT(320,260), "S632C2.s632c2f15");
    check_field_offset(lv, s632c2f16, ABISELECT(336,272), "S632C2.s632c2f16");
    test_class_info(&lv, &cd_S632C2);
    dp->~S632C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS632C2(Test_S632C2, "S632C2", ABISELECT(352,284));

#else // __cplusplus

extern void _ZN6S632C2C1Ev();
extern void _ZN6S632C2D1Ev();
Name_Map name_map_S632C2[] = {
  NSPAIR(_ZN6S632C2C1Ev),
  NSPAIR(_ZN6S632C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S632C5;
extern VTBL_ENTRY _ZTI6S632C5[];
extern  VTBL_ENTRY _ZTV6S632C5[];
extern Class_Descriptor cd_S632C4;
extern VTBL_ENTRY _ZTI6S632C4[];
extern  VTBL_ENTRY _ZTV6S632C4[];
extern Class_Descriptor cd_S632C3;
extern VTBL_ENTRY _ZTI6S632C3[];
extern  VTBL_ENTRY _ZTV6S632C3[];
static Base_Class bases_S632C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S632C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S632C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S632C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S632C2[];
extern void _ZN6S632C2D1Ev();
extern void _ZN6S632C2D0Ev();
extern void _ZN6S632C52v5Ev();
extern void _ZN6S632C52v6Ev();
extern void _ZN6S632C52v7Ev();
extern void _ZN6S632C52v8Ev();
extern void _ZN6S632C52v9Ev();
extern void _ZN6S632C53v10Ev();
extern void _ZN6S632C53v11Ev();
extern void _ZN6S632C53v12Ev();
extern void _ZN6S632C53v13Ev();
extern void _ZN6S632C53v14Ev();
extern void _ZN6S632C53v15Ev();
extern void _ZN6S632C53v16Ev();
extern void _ZN6S632C53v17Ev();
extern void _ZN6S632C53v18Ev();
extern void _ZN6S632C53v19Ev();
extern void _ZN6S632C53v20Ev();
extern void _ZN6S632C53v21Ev();
extern void _ZN6S632C53v22Ev();
extern void _ZN6S632C53v23Ev();
extern void _ZN6S632C53v24Ev();
extern void _ZN6S632C53v25Ev();
extern void _ZN6S632C53v26Ev();
extern void _ZN6S632C53v27Ev();
extern void _ZN6S632C53v28Ev();
extern void _ZN6S632C53v29Ev();
extern void _ZN6S632C53v30Ev();
extern void _ZN6S632C53v31Ev();
extern void _ZN6S632C53v32Ev();
extern void _ZN6S632C53v33Ev();
extern void _ZN6S632C53v34Ev();
extern void _ZN6S632C53v35Ev();
extern void _ZN6S632C53v36Ev();
extern void _ZN6S632C53v37Ev();
extern void _ZN6S632C53v38Ev();
extern void _ZN6S632C53v39Ev();
extern void _ZN6S632C53v40Ev();
extern void _ZN6S632C53v41Ev();
extern void _ZN6S632C53v42Ev();
extern void _ZN6S632C53v43Ev();
extern void _ZN6S632C53v44Ev();
extern void _ZN6S632C53v45Ev();
extern void _ZN6S632C53v46Ev();
extern void _ZN6S632C53v47Ev();
extern void _ZN6S632C53v48Ev();
extern void _ZN6S632C53v49Ev();
extern void _ZN6S632C53v50Ev();
extern void _ZN6S632C53v51Ev();
extern void _ZN6S632C53v52Ev();
extern void _ZN6S632C53v53Ev();
extern void _ZN6S632C53v54Ev();
extern void _ZN6S632C53v55Ev();
extern void _ZN6S632C53v56Ev();
extern void _ZN6S632C53v57Ev();
extern void _ZN6S632C53v58Ev();
extern void _ZN6S632C53v59Ev();
extern void _ZN6S632C53v60Ev();
extern void _ZN6S632C53v61Ev();
extern void _ZN6S632C53v62Ev();
extern void _ZN6S632C53v63Ev();
extern void _ZN6S632C53v64Ev();
extern void _ZN6S632C53v65Ev();
extern void _ZN6S632C53v66Ev();
extern void _ZN6S632C53v67Ev();
extern void _ZN6S632C53v68Ev();
extern void _ZN6S632C43v69Ev();
extern void _ZN6S632C43v70Ev();
extern void _ZN6S632C43v71Ev();
extern void _ZN6S632C43v72Ev();
extern void _ZN6S632C43v73Ev();
extern void _ZN6S632C43v74Ev();
extern void _ZN6S632C43v75Ev();
extern void _ZN6S632C43v76Ev();
extern void _ZN6S632C43v77Ev();
extern void _ZN6S632C43v78Ev();
extern void _ZN6S632C43v79Ev();
extern void _ZN6S632C43v80Ev();
extern void _ZN6S632C43v81Ev();
extern void _ZN6S632C33v82Ev();
extern void _ZN6S632C33v83Ev();
extern void _ZN6S632C33v84Ev();
extern void _ZN6S632C33v85Ev();
extern void _ZN6S632C33v86Ev();
extern void _ZN6S632C33v87Ev();
extern void _ZN6S632C33v88Ev();
extern void _ZN6S632C23v89Ev();
extern void _ZN6S632C23v90Ev();
extern void _ZN6S632C23v91Ev();
static  VTBL_ENTRY vtc_S632C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S632C2[0]),
  (VTBL_ENTRY)&_ZN6S632C2D1Ev,
  (VTBL_ENTRY)&_ZN6S632C2D0Ev,
  (VTBL_ENTRY)&_ZN6S632C52v5Ev,
  (VTBL_ENTRY)&_ZN6S632C52v6Ev,
  (VTBL_ENTRY)&_ZN6S632C52v7Ev,
  (VTBL_ENTRY)&_ZN6S632C52v8Ev,
  (VTBL_ENTRY)&_ZN6S632C52v9Ev,
  (VTBL_ENTRY)&_ZN6S632C53v10Ev,
  (VTBL_ENTRY)&_ZN6S632C53v11Ev,
  (VTBL_ENTRY)&_ZN6S632C53v12Ev,
  (VTBL_ENTRY)&_ZN6S632C53v13Ev,
  (VTBL_ENTRY)&_ZN6S632C53v14Ev,
  (VTBL_ENTRY)&_ZN6S632C53v15Ev,
  (VTBL_ENTRY)&_ZN6S632C53v16Ev,
  (VTBL_ENTRY)&_ZN6S632C53v17Ev,
  (VTBL_ENTRY)&_ZN6S632C53v18Ev,
  (VTBL_ENTRY)&_ZN6S632C53v19Ev,
  (VTBL_ENTRY)&_ZN6S632C53v20Ev,
  (VTBL_ENTRY)&_ZN6S632C53v21Ev,
  (VTBL_ENTRY)&_ZN6S632C53v22Ev,
  (VTBL_ENTRY)&_ZN6S632C53v23Ev,
  (VTBL_ENTRY)&_ZN6S632C53v24Ev,
  (VTBL_ENTRY)&_ZN6S632C53v25Ev,
  (VTBL_ENTRY)&_ZN6S632C53v26Ev,
  (VTBL_ENTRY)&_ZN6S632C53v27Ev,
  (VTBL_ENTRY)&_ZN6S632C53v28Ev,
  (VTBL_ENTRY)&_ZN6S632C53v29Ev,
  (VTBL_ENTRY)&_ZN6S632C53v30Ev,
  (VTBL_ENTRY)&_ZN6S632C53v31Ev,
  (VTBL_ENTRY)&_ZN6S632C53v32Ev,
  (VTBL_ENTRY)&_ZN6S632C53v33Ev,
  (VTBL_ENTRY)&_ZN6S632C53v34Ev,
  (VTBL_ENTRY)&_ZN6S632C53v35Ev,
  (VTBL_ENTRY)&_ZN6S632C53v36Ev,
  (VTBL_ENTRY)&_ZN6S632C53v37Ev,
  (VTBL_ENTRY)&_ZN6S632C53v38Ev,
  (VTBL_ENTRY)&_ZN6S632C53v39Ev,
  (VTBL_ENTRY)&_ZN6S632C53v40Ev,
  (VTBL_ENTRY)&_ZN6S632C53v41Ev,
  (VTBL_ENTRY)&_ZN6S632C53v42Ev,
  (VTBL_ENTRY)&_ZN6S632C53v43Ev,
  (VTBL_ENTRY)&_ZN6S632C53v44Ev,
  (VTBL_ENTRY)&_ZN6S632C53v45Ev,
  (VTBL_ENTRY)&_ZN6S632C53v46Ev,
  (VTBL_ENTRY)&_ZN6S632C53v47Ev,
  (VTBL_ENTRY)&_ZN6S632C53v48Ev,
  (VTBL_ENTRY)&_ZN6S632C53v49Ev,
  (VTBL_ENTRY)&_ZN6S632C53v50Ev,
  (VTBL_ENTRY)&_ZN6S632C53v51Ev,
  (VTBL_ENTRY)&_ZN6S632C53v52Ev,
  (VTBL_ENTRY)&_ZN6S632C53v53Ev,
  (VTBL_ENTRY)&_ZN6S632C53v54Ev,
  (VTBL_ENTRY)&_ZN6S632C53v55Ev,
  (VTBL_ENTRY)&_ZN6S632C53v56Ev,
  (VTBL_ENTRY)&_ZN6S632C53v57Ev,
  (VTBL_ENTRY)&_ZN6S632C53v58Ev,
  (VTBL_ENTRY)&_ZN6S632C53v59Ev,
  (VTBL_ENTRY)&_ZN6S632C53v60Ev,
  (VTBL_ENTRY)&_ZN6S632C53v61Ev,
  (VTBL_ENTRY)&_ZN6S632C53v62Ev,
  (VTBL_ENTRY)&_ZN6S632C53v63Ev,
  (VTBL_ENTRY)&_ZN6S632C53v64Ev,
  (VTBL_ENTRY)&_ZN6S632C53v65Ev,
  (VTBL_ENTRY)&_ZN6S632C53v66Ev,
  (VTBL_ENTRY)&_ZN6S632C53v67Ev,
  (VTBL_ENTRY)&_ZN6S632C53v68Ev,
  (VTBL_ENTRY)&_ZN6S632C43v69Ev,
  (VTBL_ENTRY)&_ZN6S632C43v70Ev,
  (VTBL_ENTRY)&_ZN6S632C43v71Ev,
  (VTBL_ENTRY)&_ZN6S632C43v72Ev,
  (VTBL_ENTRY)&_ZN6S632C43v73Ev,
  (VTBL_ENTRY)&_ZN6S632C43v74Ev,
  (VTBL_ENTRY)&_ZN6S632C43v75Ev,
  (VTBL_ENTRY)&_ZN6S632C43v76Ev,
  (VTBL_ENTRY)&_ZN6S632C43v77Ev,
  (VTBL_ENTRY)&_ZN6S632C43v78Ev,
  (VTBL_ENTRY)&_ZN6S632C43v79Ev,
  (VTBL_ENTRY)&_ZN6S632C43v80Ev,
  (VTBL_ENTRY)&_ZN6S632C43v81Ev,
  (VTBL_ENTRY)&_ZN6S632C33v82Ev,
  (VTBL_ENTRY)&_ZN6S632C33v83Ev,
  (VTBL_ENTRY)&_ZN6S632C33v84Ev,
  (VTBL_ENTRY)&_ZN6S632C33v85Ev,
  (VTBL_ENTRY)&_ZN6S632C33v86Ev,
  (VTBL_ENTRY)&_ZN6S632C33v87Ev,
  (VTBL_ENTRY)&_ZN6S632C33v88Ev,
  (VTBL_ENTRY)&_ZN6S632C23v89Ev,
  (VTBL_ENTRY)&_ZN6S632C23v90Ev,
  (VTBL_ENTRY)&_ZN6S632C23v91Ev,
};
extern VTBL_ENTRY _ZTI6S632C2[];
extern  VTBL_ENTRY _ZTV6S632C2[];
Class_Descriptor cd_S632C2 = {  "S632C2", // class name
  bases_S632C2, 3,
  &(vtc_S632C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,284), // object size
  NSPAIRA(_ZTI6S632C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S632C2),91, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S632C1  : S632C2 {
  ::S273C7_nt s632c1f0;
  int s632c1f1;
  ::S273C7_nt s632c1f2;
  int s632c1f3;
  ::S273C7_nt s632c1f4;
  int s632c1f5[3];
  unsigned int s632c1f6:1;
  int s632c1f7;
  virtual  ~S632C1(); // _ZN6S632C1D1Ev
  virtual void  v1(); // _ZN6S632C12v1Ev
  virtual void  v2(); // _ZN6S632C12v2Ev
  virtual void  v3(); // _ZN6S632C12v3Ev
  virtual void  v4(); // _ZN6S632C12v4Ev
  S632C1(); // tgen
};
//SIG(1 S632C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 Fp FC6 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC10{ BC11{ BC9}} Fi:1 Fi[2] Fp Fi[3]} vd v82 v83 v84 v85 v86 v87 v88 Fi:1 Fi:1 Fi:1 Fi:1 FC12{ m Fi[3]} Fc[2] FC6 FC13{ m Fi[3]} FC6} vd v89 v90 v91 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC14{ Fi[3]} FC14 FC15{ BC16{ BC9}} Fi[2] FC13 Fi FC13 FC17{ m Fp FC6}} vd v1 v2 v3 v4 FC6 Fi FC6 Fi FC6 Fi[3] Fi:1 Fi}


 S632C1 ::~S632C1(){ note_dtor("S632C1", this);}
void  S632C1 ::v1(){vfunc_called(this, "_ZN6S632C12v1Ev");}
void  S632C1 ::v2(){vfunc_called(this, "_ZN6S632C12v2Ev");}
void  S632C1 ::v3(){vfunc_called(this, "_ZN6S632C12v3Ev");}
void  S632C1 ::v4(){vfunc_called(this, "_ZN6S632C12v4Ev");}
S632C1 ::S632C1(){ note_ctor("S632C1", this);} // tgen

static void Test_S632C1()
{
  extern Class_Descriptor cd_S632C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,85)];
    init_test(&cd_S632C1, buf);
    S632C1 *dp, &lv = *(dp=new (buf) S632C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,336), "sizeof(S632C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S632C1)");
    check_base_class_offset(lv, (S632C5*)(S632C4*)(S632C3*)(S632C2*), 0, "S632C1");
    check_base_class_offset(lv, (S632C4*)(S632C3*)(S632C2*), 0, "S632C1");
    check_base_class_offset(lv, (S632C3*)(S632C2*), 0, "S632C1");
    check_base_class_offset(lv, (S632C2*), 0, "S632C1");
    check_field_offset(lv, s632c1f0, ABISELECT(352,284), "S632C1.s632c1f0");
    check_field_offset(lv, s632c1f1, ABISELECT(360,292), "S632C1.s632c1f1");
    check_field_offset(lv, s632c1f2, ABISELECT(364,296), "S632C1.s632c1f2");
    check_field_offset(lv, s632c1f3, ABISELECT(372,304), "S632C1.s632c1f3");
    check_field_offset(lv, s632c1f4, ABISELECT(376,308), "S632C1.s632c1f4");
    check_field_offset(lv, s632c1f5, ABISELECT(384,316), "S632C1.s632c1f5");
    set_bf_and_test(lv, s632c1f6, ABISELECT(396,328), 0, 1, 1, "S632C1");
    check_field_offset(lv, s632c1f7, ABISELECT(400,332), "S632C1.s632c1f7");
    test_class_info(&lv, &cd_S632C1);
    dp->~S632C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS632C1(Test_S632C1, "S632C1", ABISELECT(408,336));

#else // __cplusplus

extern void _ZN6S632C1C1Ev();
extern void _ZN6S632C1D1Ev();
Name_Map name_map_S632C1[] = {
  NSPAIR(_ZN6S632C1C1Ev),
  NSPAIR(_ZN6S632C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S632C5;
extern VTBL_ENTRY _ZTI6S632C5[];
extern  VTBL_ENTRY _ZTV6S632C5[];
extern Class_Descriptor cd_S632C4;
extern VTBL_ENTRY _ZTI6S632C4[];
extern  VTBL_ENTRY _ZTV6S632C4[];
extern Class_Descriptor cd_S632C3;
extern VTBL_ENTRY _ZTI6S632C3[];
extern  VTBL_ENTRY _ZTV6S632C3[];
extern Class_Descriptor cd_S632C2;
extern VTBL_ENTRY _ZTI6S632C2[];
extern  VTBL_ENTRY _ZTV6S632C2[];
static Base_Class bases_S632C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S632C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S632C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S632C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S632C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S632C1[];
extern void _ZN6S632C1D1Ev();
extern void _ZN6S632C1D0Ev();
extern void _ZN6S632C52v5Ev();
extern void _ZN6S632C52v6Ev();
extern void _ZN6S632C52v7Ev();
extern void _ZN6S632C52v8Ev();
extern void _ZN6S632C52v9Ev();
extern void _ZN6S632C53v10Ev();
extern void _ZN6S632C53v11Ev();
extern void _ZN6S632C53v12Ev();
extern void _ZN6S632C53v13Ev();
extern void _ZN6S632C53v14Ev();
extern void _ZN6S632C53v15Ev();
extern void _ZN6S632C53v16Ev();
extern void _ZN6S632C53v17Ev();
extern void _ZN6S632C53v18Ev();
extern void _ZN6S632C53v19Ev();
extern void _ZN6S632C53v20Ev();
extern void _ZN6S632C53v21Ev();
extern void _ZN6S632C53v22Ev();
extern void _ZN6S632C53v23Ev();
extern void _ZN6S632C53v24Ev();
extern void _ZN6S632C53v25Ev();
extern void _ZN6S632C53v26Ev();
extern void _ZN6S632C53v27Ev();
extern void _ZN6S632C53v28Ev();
extern void _ZN6S632C53v29Ev();
extern void _ZN6S632C53v30Ev();
extern void _ZN6S632C53v31Ev();
extern void _ZN6S632C53v32Ev();
extern void _ZN6S632C53v33Ev();
extern void _ZN6S632C53v34Ev();
extern void _ZN6S632C53v35Ev();
extern void _ZN6S632C53v36Ev();
extern void _ZN6S632C53v37Ev();
extern void _ZN6S632C53v38Ev();
extern void _ZN6S632C53v39Ev();
extern void _ZN6S632C53v40Ev();
extern void _ZN6S632C53v41Ev();
extern void _ZN6S632C53v42Ev();
extern void _ZN6S632C53v43Ev();
extern void _ZN6S632C53v44Ev();
extern void _ZN6S632C53v45Ev();
extern void _ZN6S632C53v46Ev();
extern void _ZN6S632C53v47Ev();
extern void _ZN6S632C53v48Ev();
extern void _ZN6S632C53v49Ev();
extern void _ZN6S632C53v50Ev();
extern void _ZN6S632C53v51Ev();
extern void _ZN6S632C53v52Ev();
extern void _ZN6S632C53v53Ev();
extern void _ZN6S632C53v54Ev();
extern void _ZN6S632C53v55Ev();
extern void _ZN6S632C53v56Ev();
extern void _ZN6S632C53v57Ev();
extern void _ZN6S632C53v58Ev();
extern void _ZN6S632C53v59Ev();
extern void _ZN6S632C53v60Ev();
extern void _ZN6S632C53v61Ev();
extern void _ZN6S632C53v62Ev();
extern void _ZN6S632C53v63Ev();
extern void _ZN6S632C53v64Ev();
extern void _ZN6S632C53v65Ev();
extern void _ZN6S632C53v66Ev();
extern void _ZN6S632C53v67Ev();
extern void _ZN6S632C53v68Ev();
extern void _ZN6S632C43v69Ev();
extern void _ZN6S632C43v70Ev();
extern void _ZN6S632C43v71Ev();
extern void _ZN6S632C43v72Ev();
extern void _ZN6S632C43v73Ev();
extern void _ZN6S632C43v74Ev();
extern void _ZN6S632C43v75Ev();
extern void _ZN6S632C43v76Ev();
extern void _ZN6S632C43v77Ev();
extern void _ZN6S632C43v78Ev();
extern void _ZN6S632C43v79Ev();
extern void _ZN6S632C43v80Ev();
extern void _ZN6S632C43v81Ev();
extern void _ZN6S632C33v82Ev();
extern void _ZN6S632C33v83Ev();
extern void _ZN6S632C33v84Ev();
extern void _ZN6S632C33v85Ev();
extern void _ZN6S632C33v86Ev();
extern void _ZN6S632C33v87Ev();
extern void _ZN6S632C33v88Ev();
extern void _ZN6S632C23v89Ev();
extern void _ZN6S632C23v90Ev();
extern void _ZN6S632C23v91Ev();
extern void _ZN6S632C12v1Ev();
extern void _ZN6S632C12v2Ev();
extern void _ZN6S632C12v3Ev();
extern void _ZN6S632C12v4Ev();
static  VTBL_ENTRY vtc_S632C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S632C1[0]),
  (VTBL_ENTRY)&_ZN6S632C1D1Ev,
  (VTBL_ENTRY)&_ZN6S632C1D0Ev,
  (VTBL_ENTRY)&_ZN6S632C52v5Ev,
  (VTBL_ENTRY)&_ZN6S632C52v6Ev,
  (VTBL_ENTRY)&_ZN6S632C52v7Ev,
  (VTBL_ENTRY)&_ZN6S632C52v8Ev,
  (VTBL_ENTRY)&_ZN6S632C52v9Ev,
  (VTBL_ENTRY)&_ZN6S632C53v10Ev,
  (VTBL_ENTRY)&_ZN6S632C53v11Ev,
  (VTBL_ENTRY)&_ZN6S632C53v12Ev,
  (VTBL_ENTRY)&_ZN6S632C53v13Ev,
  (VTBL_ENTRY)&_ZN6S632C53v14Ev,
  (VTBL_ENTRY)&_ZN6S632C53v15Ev,
  (VTBL_ENTRY)&_ZN6S632C53v16Ev,
  (VTBL_ENTRY)&_ZN6S632C53v17Ev,
  (VTBL_ENTRY)&_ZN6S632C53v18Ev,
  (VTBL_ENTRY)&_ZN6S632C53v19Ev,
  (VTBL_ENTRY)&_ZN6S632C53v20Ev,
  (VTBL_ENTRY)&_ZN6S632C53v21Ev,
  (VTBL_ENTRY)&_ZN6S632C53v22Ev,
  (VTBL_ENTRY)&_ZN6S632C53v23Ev,
  (VTBL_ENTRY)&_ZN6S632C53v24Ev,
  (VTBL_ENTRY)&_ZN6S632C53v25Ev,
  (VTBL_ENTRY)&_ZN6S632C53v26Ev,
  (VTBL_ENTRY)&_ZN6S632C53v27Ev,
  (VTBL_ENTRY)&_ZN6S632C53v28Ev,
  (VTBL_ENTRY)&_ZN6S632C53v29Ev,
  (VTBL_ENTRY)&_ZN6S632C53v30Ev,
  (VTBL_ENTRY)&_ZN6S632C53v31Ev,
  (VTBL_ENTRY)&_ZN6S632C53v32Ev,
  (VTBL_ENTRY)&_ZN6S632C53v33Ev,
  (VTBL_ENTRY)&_ZN6S632C53v34Ev,
  (VTBL_ENTRY)&_ZN6S632C53v35Ev,
  (VTBL_ENTRY)&_ZN6S632C53v36Ev,
  (VTBL_ENTRY)&_ZN6S632C53v37Ev,
  (VTBL_ENTRY)&_ZN6S632C53v38Ev,
  (VTBL_ENTRY)&_ZN6S632C53v39Ev,
  (VTBL_ENTRY)&_ZN6S632C53v40Ev,
  (VTBL_ENTRY)&_ZN6S632C53v41Ev,
  (VTBL_ENTRY)&_ZN6S632C53v42Ev,
  (VTBL_ENTRY)&_ZN6S632C53v43Ev,
  (VTBL_ENTRY)&_ZN6S632C53v44Ev,
  (VTBL_ENTRY)&_ZN6S632C53v45Ev,
  (VTBL_ENTRY)&_ZN6S632C53v46Ev,
  (VTBL_ENTRY)&_ZN6S632C53v47Ev,
  (VTBL_ENTRY)&_ZN6S632C53v48Ev,
  (VTBL_ENTRY)&_ZN6S632C53v49Ev,
  (VTBL_ENTRY)&_ZN6S632C53v50Ev,
  (VTBL_ENTRY)&_ZN6S632C53v51Ev,
  (VTBL_ENTRY)&_ZN6S632C53v52Ev,
  (VTBL_ENTRY)&_ZN6S632C53v53Ev,
  (VTBL_ENTRY)&_ZN6S632C53v54Ev,
  (VTBL_ENTRY)&_ZN6S632C53v55Ev,
  (VTBL_ENTRY)&_ZN6S632C53v56Ev,
  (VTBL_ENTRY)&_ZN6S632C53v57Ev,
  (VTBL_ENTRY)&_ZN6S632C53v58Ev,
  (VTBL_ENTRY)&_ZN6S632C53v59Ev,
  (VTBL_ENTRY)&_ZN6S632C53v60Ev,
  (VTBL_ENTRY)&_ZN6S632C53v61Ev,
  (VTBL_ENTRY)&_ZN6S632C53v62Ev,
  (VTBL_ENTRY)&_ZN6S632C53v63Ev,
  (VTBL_ENTRY)&_ZN6S632C53v64Ev,
  (VTBL_ENTRY)&_ZN6S632C53v65Ev,
  (VTBL_ENTRY)&_ZN6S632C53v66Ev,
  (VTBL_ENTRY)&_ZN6S632C53v67Ev,
  (VTBL_ENTRY)&_ZN6S632C53v68Ev,
  (VTBL_ENTRY)&_ZN6S632C43v69Ev,
  (VTBL_ENTRY)&_ZN6S632C43v70Ev,
  (VTBL_ENTRY)&_ZN6S632C43v71Ev,
  (VTBL_ENTRY)&_ZN6S632C43v72Ev,
  (VTBL_ENTRY)&_ZN6S632C43v73Ev,
  (VTBL_ENTRY)&_ZN6S632C43v74Ev,
  (VTBL_ENTRY)&_ZN6S632C43v75Ev,
  (VTBL_ENTRY)&_ZN6S632C43v76Ev,
  (VTBL_ENTRY)&_ZN6S632C43v77Ev,
  (VTBL_ENTRY)&_ZN6S632C43v78Ev,
  (VTBL_ENTRY)&_ZN6S632C43v79Ev,
  (VTBL_ENTRY)&_ZN6S632C43v80Ev,
  (VTBL_ENTRY)&_ZN6S632C43v81Ev,
  (VTBL_ENTRY)&_ZN6S632C33v82Ev,
  (VTBL_ENTRY)&_ZN6S632C33v83Ev,
  (VTBL_ENTRY)&_ZN6S632C33v84Ev,
  (VTBL_ENTRY)&_ZN6S632C33v85Ev,
  (VTBL_ENTRY)&_ZN6S632C33v86Ev,
  (VTBL_ENTRY)&_ZN6S632C33v87Ev,
  (VTBL_ENTRY)&_ZN6S632C33v88Ev,
  (VTBL_ENTRY)&_ZN6S632C23v89Ev,
  (VTBL_ENTRY)&_ZN6S632C23v90Ev,
  (VTBL_ENTRY)&_ZN6S632C23v91Ev,
  (VTBL_ENTRY)&_ZN6S632C12v1Ev,
  (VTBL_ENTRY)&_ZN6S632C12v2Ev,
  (VTBL_ENTRY)&_ZN6S632C12v3Ev,
  (VTBL_ENTRY)&_ZN6S632C12v4Ev,
};
extern VTBL_ENTRY _ZTI6S632C1[];
extern  VTBL_ENTRY _ZTV6S632C1[];
Class_Descriptor cd_S632C1 = {  "S632C1", // class name
  bases_S632C1, 4,
  &(vtc_S632C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(408,336), // object size
  NSPAIRA(_ZTI6S632C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S632C1),95, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S571C5  {
  int s571c5f0;
  __tsi64 s571c5f1;
  void *s571c5f2[4];
  int s571c5f3[2];
  void *s571c5f4;
  ::S273C7_nt s571c5f5;
  void *s571c5f6[2];
  virtual  ~S571C5(); // _ZN6S571C5D1Ev
  virtual void  v4(); // _ZN6S571C52v4Ev
  virtual void  v5(); // _ZN6S571C52v5Ev
  virtual void  v6(); // _ZN6S571C52v6Ev
  virtual void  v7(); // _ZN6S571C52v7Ev
  virtual void  v8(); // _ZN6S571C52v8Ev
  virtual void  v9(); // _ZN6S571C52v9Ev
  virtual void  v10(); // _ZN6S571C53v10Ev
  virtual void  v11(); // _ZN6S571C53v11Ev
  virtual void  v12(); // _ZN6S571C53v12Ev
  virtual void  v13(); // _ZN6S571C53v13Ev
  virtual void  v14(); // _ZN6S571C53v14Ev
  virtual void  v15(); // _ZN6S571C53v15Ev
  virtual void  v16(); // _ZN6S571C53v16Ev
  virtual void  v17(); // _ZN6S571C53v17Ev
  virtual void  v18(); // _ZN6S571C53v18Ev
  virtual void  v19(); // _ZN6S571C53v19Ev
  virtual void  v20(); // _ZN6S571C53v20Ev
  virtual void  v21(); // _ZN6S571C53v21Ev
  virtual void  v22(); // _ZN6S571C53v22Ev
  virtual void  v23(); // _ZN6S571C53v23Ev
  virtual void  v24(); // _ZN6S571C53v24Ev
  virtual void  v25(); // _ZN6S571C53v25Ev
  virtual void  v26(); // _ZN6S571C53v26Ev
  virtual void  v27(); // _ZN6S571C53v27Ev
  virtual void  v28(); // _ZN6S571C53v28Ev
  virtual void  v29(); // _ZN6S571C53v29Ev
  virtual void  v30(); // _ZN6S571C53v30Ev
  virtual void  v31(); // _ZN6S571C53v31Ev
  virtual void  v32(); // _ZN6S571C53v32Ev
  virtual void  v33(); // _ZN6S571C53v33Ev
  virtual void  v34(); // _ZN6S571C53v34Ev
  virtual void  v35(); // _ZN6S571C53v35Ev
  virtual void  v36(); // _ZN6S571C53v36Ev
  virtual void  v37(); // _ZN6S571C53v37Ev
  virtual void  v38(); // _ZN6S571C53v38Ev
  virtual void  v39(); // _ZN6S571C53v39Ev
  virtual void  v40(); // _ZN6S571C53v40Ev
  virtual void  v41(); // _ZN6S571C53v41Ev
  virtual void  v42(); // _ZN6S571C53v42Ev
  virtual void  v43(); // _ZN6S571C53v43Ev
  virtual void  v44(); // _ZN6S571C53v44Ev
  virtual void  v45(); // _ZN6S571C53v45Ev
  virtual void  v46(); // _ZN6S571C53v46Ev
  virtual void  v47(); // _ZN6S571C53v47Ev
  virtual void  v48(); // _ZN6S571C53v48Ev
  virtual void  v49(); // _ZN6S571C53v49Ev
  virtual void  v50(); // _ZN6S571C53v50Ev
  virtual void  v51(); // _ZN6S571C53v51Ev
  virtual void  v52(); // _ZN6S571C53v52Ev
  virtual void  v53(); // _ZN6S571C53v53Ev
  virtual void  v54(); // _ZN6S571C53v54Ev
  virtual void  v55(); // _ZN6S571C53v55Ev
  virtual void  v56(); // _ZN6S571C53v56Ev
  virtual void  v57(); // _ZN6S571C53v57Ev
  virtual void  v58(); // _ZN6S571C53v58Ev
  virtual void  v59(); // _ZN6S571C53v59Ev
  virtual void  v60(); // _ZN6S571C53v60Ev
  virtual void  v61(); // _ZN6S571C53v61Ev
  virtual void  v62(); // _ZN6S571C53v62Ev
  virtual void  v63(); // _ZN6S571C53v63Ev
  virtual void  v64(); // _ZN6S571C53v64Ev
  virtual void  v65(); // _ZN6S571C53v65Ev
  virtual void  v66(); // _ZN6S571C53v66Ev
  virtual void  v67(); // _ZN6S571C53v67Ev
  S571C5(); // tgen
};
//SIG(-1 S571C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S571C5 ::~S571C5(){ note_dtor("S571C5", this);}
void  S571C5 ::v4(){vfunc_called(this, "_ZN6S571C52v4Ev");}
void  S571C5 ::v5(){vfunc_called(this, "_ZN6S571C52v5Ev");}
void  S571C5 ::v6(){vfunc_called(this, "_ZN6S571C52v6Ev");}
void  S571C5 ::v7(){vfunc_called(this, "_ZN6S571C52v7Ev");}
void  S571C5 ::v8(){vfunc_called(this, "_ZN6S571C52v8Ev");}
void  S571C5 ::v9(){vfunc_called(this, "_ZN6S571C52v9Ev");}
void  S571C5 ::v10(){vfunc_called(this, "_ZN6S571C53v10Ev");}
void  S571C5 ::v11(){vfunc_called(this, "_ZN6S571C53v11Ev");}
void  S571C5 ::v12(){vfunc_called(this, "_ZN6S571C53v12Ev");}
void  S571C5 ::v13(){vfunc_called(this, "_ZN6S571C53v13Ev");}
void  S571C5 ::v14(){vfunc_called(this, "_ZN6S571C53v14Ev");}
void  S571C5 ::v15(){vfunc_called(this, "_ZN6S571C53v15Ev");}
void  S571C5 ::v16(){vfunc_called(this, "_ZN6S571C53v16Ev");}
void  S571C5 ::v17(){vfunc_called(this, "_ZN6S571C53v17Ev");}
void  S571C5 ::v18(){vfunc_called(this, "_ZN6S571C53v18Ev");}
void  S571C5 ::v19(){vfunc_called(this, "_ZN6S571C53v19Ev");}
void  S571C5 ::v20(){vfunc_called(this, "_ZN6S571C53v20Ev");}
void  S571C5 ::v21(){vfunc_called(this, "_ZN6S571C53v21Ev");}
void  S571C5 ::v22(){vfunc_called(this, "_ZN6S571C53v22Ev");}
void  S571C5 ::v23(){vfunc_called(this, "_ZN6S571C53v23Ev");}
void  S571C5 ::v24(){vfunc_called(this, "_ZN6S571C53v24Ev");}
void  S571C5 ::v25(){vfunc_called(this, "_ZN6S571C53v25Ev");}
void  S571C5 ::v26(){vfunc_called(this, "_ZN6S571C53v26Ev");}
void  S571C5 ::v27(){vfunc_called(this, "_ZN6S571C53v27Ev");}
void  S571C5 ::v28(){vfunc_called(this, "_ZN6S571C53v28Ev");}
void  S571C5 ::v29(){vfunc_called(this, "_ZN6S571C53v29Ev");}
void  S571C5 ::v30(){vfunc_called(this, "_ZN6S571C53v30Ev");}
void  S571C5 ::v31(){vfunc_called(this, "_ZN6S571C53v31Ev");}
void  S571C5 ::v32(){vfunc_called(this, "_ZN6S571C53v32Ev");}
void  S571C5 ::v33(){vfunc_called(this, "_ZN6S571C53v33Ev");}
void  S571C5 ::v34(){vfunc_called(this, "_ZN6S571C53v34Ev");}
void  S571C5 ::v35(){vfunc_called(this, "_ZN6S571C53v35Ev");}
void  S571C5 ::v36(){vfunc_called(this, "_ZN6S571C53v36Ev");}
void  S571C5 ::v37(){vfunc_called(this, "_ZN6S571C53v37Ev");}
void  S571C5 ::v38(){vfunc_called(this, "_ZN6S571C53v38Ev");}
void  S571C5 ::v39(){vfunc_called(this, "_ZN6S571C53v39Ev");}
void  S571C5 ::v40(){vfunc_called(this, "_ZN6S571C53v40Ev");}
void  S571C5 ::v41(){vfunc_called(this, "_ZN6S571C53v41Ev");}
void  S571C5 ::v42(){vfunc_called(this, "_ZN6S571C53v42Ev");}
void  S571C5 ::v43(){vfunc_called(this, "_ZN6S571C53v43Ev");}
void  S571C5 ::v44(){vfunc_called(this, "_ZN6S571C53v44Ev");}
void  S571C5 ::v45(){vfunc_called(this, "_ZN6S571C53v45Ev");}
void  S571C5 ::v46(){vfunc_called(this, "_ZN6S571C53v46Ev");}
void  S571C5 ::v47(){vfunc_called(this, "_ZN6S571C53v47Ev");}
void  S571C5 ::v48(){vfunc_called(this, "_ZN6S571C53v48Ev");}
void  S571C5 ::v49(){vfunc_called(this, "_ZN6S571C53v49Ev");}
void  S571C5 ::v50(){vfunc_called(this, "_ZN6S571C53v50Ev");}
void  S571C5 ::v51(){vfunc_called(this, "_ZN6S571C53v51Ev");}
void  S571C5 ::v52(){vfunc_called(this, "_ZN6S571C53v52Ev");}
void  S571C5 ::v53(){vfunc_called(this, "_ZN6S571C53v53Ev");}
void  S571C5 ::v54(){vfunc_called(this, "_ZN6S571C53v54Ev");}
void  S571C5 ::v55(){vfunc_called(this, "_ZN6S571C53v55Ev");}
void  S571C5 ::v56(){vfunc_called(this, "_ZN6S571C53v56Ev");}
void  S571C5 ::v57(){vfunc_called(this, "_ZN6S571C53v57Ev");}
void  S571C5 ::v58(){vfunc_called(this, "_ZN6S571C53v58Ev");}
void  S571C5 ::v59(){vfunc_called(this, "_ZN6S571C53v59Ev");}
void  S571C5 ::v60(){vfunc_called(this, "_ZN6S571C53v60Ev");}
void  S571C5 ::v61(){vfunc_called(this, "_ZN6S571C53v61Ev");}
void  S571C5 ::v62(){vfunc_called(this, "_ZN6S571C53v62Ev");}
void  S571C5 ::v63(){vfunc_called(this, "_ZN6S571C53v63Ev");}
void  S571C5 ::v64(){vfunc_called(this, "_ZN6S571C53v64Ev");}
void  S571C5 ::v65(){vfunc_called(this, "_ZN6S571C53v65Ev");}
void  S571C5 ::v66(){vfunc_called(this, "_ZN6S571C53v66Ev");}
void  S571C5 ::v67(){vfunc_called(this, "_ZN6S571C53v67Ev");}
S571C5 ::S571C5(){ note_ctor("S571C5", this);} // tgen

static void Test_S571C5()
{
  extern Class_Descriptor cd_S571C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S571C5, buf);
    S571C5 *dp, &lv = *(dp=new (buf) S571C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S571C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S571C5)");
    check_field_offset(lv, s571c5f0, ABISELECT(8,4), "S571C5.s571c5f0");
    check_field_offset(lv, s571c5f1, ABISELECT(16,8), "S571C5.s571c5f1");
    check_field_offset(lv, s571c5f2, ABISELECT(24,16), "S571C5.s571c5f2");
    check_field_offset(lv, s571c5f3, ABISELECT(56,32), "S571C5.s571c5f3");
    check_field_offset(lv, s571c5f4, ABISELECT(64,40), "S571C5.s571c5f4");
    check_field_offset(lv, s571c5f5, ABISELECT(72,44), "S571C5.s571c5f5");
    check_field_offset(lv, s571c5f6, ABISELECT(80,52), "S571C5.s571c5f6");
    test_class_info(&lv, &cd_S571C5);
    dp->~S571C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS571C5(Test_S571C5, "S571C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S571C5C1Ev();
extern void _ZN6S571C5D1Ev();
Name_Map name_map_S571C5[] = {
  NSPAIR(_ZN6S571C5C1Ev),
  NSPAIR(_ZN6S571C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S571C5[];
extern void _ZN6S571C5D1Ev();
extern void _ZN6S571C5D0Ev();
extern void _ZN6S571C52v4Ev();
extern void _ZN6S571C52v5Ev();
extern void _ZN6S571C52v6Ev();
extern void _ZN6S571C52v7Ev();
extern void _ZN6S571C52v8Ev();
extern void _ZN6S571C52v9Ev();
extern void _ZN6S571C53v10Ev();
extern void _ZN6S571C53v11Ev();
extern void _ZN6S571C53v12Ev();
extern void _ZN6S571C53v13Ev();
extern void _ZN6S571C53v14Ev();
extern void _ZN6S571C53v15Ev();
extern void _ZN6S571C53v16Ev();
extern void _ZN6S571C53v17Ev();
extern void _ZN6S571C53v18Ev();
extern void _ZN6S571C53v19Ev();
extern void _ZN6S571C53v20Ev();
extern void _ZN6S571C53v21Ev();
extern void _ZN6S571C53v22Ev();
extern void _ZN6S571C53v23Ev();
extern void _ZN6S571C53v24Ev();
extern void _ZN6S571C53v25Ev();
extern void _ZN6S571C53v26Ev();
extern void _ZN6S571C53v27Ev();
extern void _ZN6S571C53v28Ev();
extern void _ZN6S571C53v29Ev();
extern void _ZN6S571C53v30Ev();
extern void _ZN6S571C53v31Ev();
extern void _ZN6S571C53v32Ev();
extern void _ZN6S571C53v33Ev();
extern void _ZN6S571C53v34Ev();
extern void _ZN6S571C53v35Ev();
extern void _ZN6S571C53v36Ev();
extern void _ZN6S571C53v37Ev();
extern void _ZN6S571C53v38Ev();
extern void _ZN6S571C53v39Ev();
extern void _ZN6S571C53v40Ev();
extern void _ZN6S571C53v41Ev();
extern void _ZN6S571C53v42Ev();
extern void _ZN6S571C53v43Ev();
extern void _ZN6S571C53v44Ev();
extern void _ZN6S571C53v45Ev();
extern void _ZN6S571C53v46Ev();
extern void _ZN6S571C53v47Ev();
extern void _ZN6S571C53v48Ev();
extern void _ZN6S571C53v49Ev();
extern void _ZN6S571C53v50Ev();
extern void _ZN6S571C53v51Ev();
extern void _ZN6S571C53v52Ev();
extern void _ZN6S571C53v53Ev();
extern void _ZN6S571C53v54Ev();
extern void _ZN6S571C53v55Ev();
extern void _ZN6S571C53v56Ev();
extern void _ZN6S571C53v57Ev();
extern void _ZN6S571C53v58Ev();
extern void _ZN6S571C53v59Ev();
extern void _ZN6S571C53v60Ev();
extern void _ZN6S571C53v61Ev();
extern void _ZN6S571C53v62Ev();
extern void _ZN6S571C53v63Ev();
extern void _ZN6S571C53v64Ev();
extern void _ZN6S571C53v65Ev();
extern void _ZN6S571C53v66Ev();
extern void _ZN6S571C53v67Ev();
static  VTBL_ENTRY vtc_S571C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S571C5[0]),
  (VTBL_ENTRY)&_ZN6S571C5D1Ev,
  (VTBL_ENTRY)&_ZN6S571C5D0Ev,
  (VTBL_ENTRY)&_ZN6S571C52v4Ev,
  (VTBL_ENTRY)&_ZN6S571C52v5Ev,
  (VTBL_ENTRY)&_ZN6S571C52v6Ev,
  (VTBL_ENTRY)&_ZN6S571C52v7Ev,
  (VTBL_ENTRY)&_ZN6S571C52v8Ev,
  (VTBL_ENTRY)&_ZN6S571C52v9Ev,
  (VTBL_ENTRY)&_ZN6S571C53v10Ev,
  (VTBL_ENTRY)&_ZN6S571C53v11Ev,
  (VTBL_ENTRY)&_ZN6S571C53v12Ev,
  (VTBL_ENTRY)&_ZN6S571C53v13Ev,
  (VTBL_ENTRY)&_ZN6S571C53v14Ev,
  (VTBL_ENTRY)&_ZN6S571C53v15Ev,
  (VTBL_ENTRY)&_ZN6S571C53v16Ev,
  (VTBL_ENTRY)&_ZN6S571C53v17Ev,
  (VTBL_ENTRY)&_ZN6S571C53v18Ev,
  (VTBL_ENTRY)&_ZN6S571C53v19Ev,
  (VTBL_ENTRY)&_ZN6S571C53v20Ev,
  (VTBL_ENTRY)&_ZN6S571C53v21Ev,
  (VTBL_ENTRY)&_ZN6S571C53v22Ev,
  (VTBL_ENTRY)&_ZN6S571C53v23Ev,
  (VTBL_ENTRY)&_ZN6S571C53v24Ev,
  (VTBL_ENTRY)&_ZN6S571C53v25Ev,
  (VTBL_ENTRY)&_ZN6S571C53v26Ev,
  (VTBL_ENTRY)&_ZN6S571C53v27Ev,
  (VTBL_ENTRY)&_ZN6S571C53v28Ev,
  (VTBL_ENTRY)&_ZN6S571C53v29Ev,
  (VTBL_ENTRY)&_ZN6S571C53v30Ev,
  (VTBL_ENTRY)&_ZN6S571C53v31Ev,
  (VTBL_ENTRY)&_ZN6S571C53v32Ev,
  (VTBL_ENTRY)&_ZN6S571C53v33Ev,
  (VTBL_ENTRY)&_ZN6S571C53v34Ev,
  (VTBL_ENTRY)&_ZN6S571C53v35Ev,
  (VTBL_ENTRY)&_ZN6S571C53v36Ev,
  (VTBL_ENTRY)&_ZN6S571C53v37Ev,
  (VTBL_ENTRY)&_ZN6S571C53v38Ev,
  (VTBL_ENTRY)&_ZN6S571C53v39Ev,
  (VTBL_ENTRY)&_ZN6S571C53v40Ev,
  (VTBL_ENTRY)&_ZN6S571C53v41Ev,
  (VTBL_ENTRY)&_ZN6S571C53v42Ev,
  (VTBL_ENTRY)&_ZN6S571C53v43Ev,
  (VTBL_ENTRY)&_ZN6S571C53v44Ev,
  (VTBL_ENTRY)&_ZN6S571C53v45Ev,
  (VTBL_ENTRY)&_ZN6S571C53v46Ev,
  (VTBL_ENTRY)&_ZN6S571C53v47Ev,
  (VTBL_ENTRY)&_ZN6S571C53v48Ev,
  (VTBL_ENTRY)&_ZN6S571C53v49Ev,
  (VTBL_ENTRY)&_ZN6S571C53v50Ev,
  (VTBL_ENTRY)&_ZN6S571C53v51Ev,
  (VTBL_ENTRY)&_ZN6S571C53v52Ev,
  (VTBL_ENTRY)&_ZN6S571C53v53Ev,
  (VTBL_ENTRY)&_ZN6S571C53v54Ev,
  (VTBL_ENTRY)&_ZN6S571C53v55Ev,
  (VTBL_ENTRY)&_ZN6S571C53v56Ev,
  (VTBL_ENTRY)&_ZN6S571C53v57Ev,
  (VTBL_ENTRY)&_ZN6S571C53v58Ev,
  (VTBL_ENTRY)&_ZN6S571C53v59Ev,
  (VTBL_ENTRY)&_ZN6S571C53v60Ev,
  (VTBL_ENTRY)&_ZN6S571C53v61Ev,
  (VTBL_ENTRY)&_ZN6S571C53v62Ev,
  (VTBL_ENTRY)&_ZN6S571C53v63Ev,
  (VTBL_ENTRY)&_ZN6S571C53v64Ev,
  (VTBL_ENTRY)&_ZN6S571C53v65Ev,
  (VTBL_ENTRY)&_ZN6S571C53v66Ev,
  (VTBL_ENTRY)&_ZN6S571C53v67Ev,
};
extern VTBL_ENTRY _ZTI6S571C5[];
extern  VTBL_ENTRY _ZTV6S571C5[];
Class_Descriptor cd_S571C5 = {  "S571C5", // class name
  0,0,//no base classes
  &(vtc_S571C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S571C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S571C5),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S571C4  : S571C5 {
  void *s571c4f0;
  ::S273C7_nt s571c4f1;
  int s571c4f2[5];
  unsigned int s571c4f3:1;
  unsigned int s571c4f4:1;
  unsigned int s571c4f5:1;
  unsigned int s571c4f6:1;
  unsigned int s571c4f7:1;
  ::S273C21 s571c4f8;
  ::S273C17 s571c4f9;
  unsigned int s571c4f10:1;
  int s571c4f11[2];
  void *s571c4f12;
  int s571c4f13[3];
  virtual  ~S571C4(); // _ZN6S571C4D1Ev
  virtual void  v68(); // _ZN6S571C43v68Ev
  virtual void  v69(); // _ZN6S571C43v69Ev
  virtual void  v70(); // _ZN6S571C43v70Ev
  virtual void  v71(); // _ZN6S571C43v71Ev
  virtual void  v72(); // _ZN6S571C43v72Ev
  virtual void  v73(); // _ZN6S571C43v73Ev
  virtual void  v74(); // _ZN6S571C43v74Ev
  virtual void  v75(); // _ZN6S571C43v75Ev
  virtual void  v76(); // _ZN6S571C43v76Ev
  virtual void  v77(); // _ZN6S571C43v77Ev
  virtual void  v78(); // _ZN6S571C43v78Ev
  virtual void  v79(); // _ZN6S571C43v79Ev
  virtual void  v80(); // _ZN6S571C43v80Ev
  S571C4(); // tgen
};
//SIG(-1 S571C4) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S571C4 ::~S571C4(){ note_dtor("S571C4", this);}
void  S571C4 ::v68(){vfunc_called(this, "_ZN6S571C43v68Ev");}
void  S571C4 ::v69(){vfunc_called(this, "_ZN6S571C43v69Ev");}
void  S571C4 ::v70(){vfunc_called(this, "_ZN6S571C43v70Ev");}
void  S571C4 ::v71(){vfunc_called(this, "_ZN6S571C43v71Ev");}
void  S571C4 ::v72(){vfunc_called(this, "_ZN6S571C43v72Ev");}
void  S571C4 ::v73(){vfunc_called(this, "_ZN6S571C43v73Ev");}
void  S571C4 ::v74(){vfunc_called(this, "_ZN6S571C43v74Ev");}
void  S571C4 ::v75(){vfunc_called(this, "_ZN6S571C43v75Ev");}
void  S571C4 ::v76(){vfunc_called(this, "_ZN6S571C43v76Ev");}
void  S571C4 ::v77(){vfunc_called(this, "_ZN6S571C43v77Ev");}
void  S571C4 ::v78(){vfunc_called(this, "_ZN6S571C43v78Ev");}
void  S571C4 ::v79(){vfunc_called(this, "_ZN6S571C43v79Ev");}
void  S571C4 ::v80(){vfunc_called(this, "_ZN6S571C43v80Ev");}
S571C4 ::S571C4(){ note_ctor("S571C4", this);} // tgen

static void Test_S571C4()
{
  extern Class_Descriptor cd_S571C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S571C4, buf);
    S571C4 *dp, &lv = *(dp=new (buf) S571C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S571C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S571C4)");
    check_base_class_offset(lv, (S571C5*), 0, "S571C4");
    check_field_offset(lv, s571c4f0, ABISELECT(96,60), "S571C4.s571c4f0");
    check_field_offset(lv, s571c4f1, ABISELECT(104,64), "S571C4.s571c4f1");
    check_field_offset(lv, s571c4f2, ABISELECT(112,72), "S571C4.s571c4f2");
    set_bf_and_test(lv, s571c4f3, ABISELECT(132,92), 0, 1, 1, "S571C4");
    set_bf_and_test(lv, s571c4f4, ABISELECT(132,92), 1, 1, 1, "S571C4");
    set_bf_and_test(lv, s571c4f5, ABISELECT(132,92), 2, 1, 1, "S571C4");
    set_bf_and_test(lv, s571c4f6, ABISELECT(132,92), 3, 1, 1, "S571C4");
    set_bf_and_test(lv, s571c4f7, ABISELECT(132,92), 4, 1, 1, "S571C4");
    check_field_offset(lv, s571c4f8, ABISELECT(136,96), "S571C4.s571c4f8");
    check_field_offset(lv, s571c4f9, ABISELECT(152,108), "S571C4.s571c4f9");
    set_bf_and_test(lv, s571c4f10, ABISELECT(168,120), 0, 1, 1, "S571C4");
    check_field_offset(lv, s571c4f11, ABISELECT(172,124), "S571C4.s571c4f11");
    check_field_offset(lv, s571c4f12, ABISELECT(184,132), "S571C4.s571c4f12");
    check_field_offset(lv, s571c4f13, ABISELECT(192,136), "S571C4.s571c4f13");
    test_class_info(&lv, &cd_S571C4);
    dp->~S571C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS571C4(Test_S571C4, "S571C4", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN6S571C4C1Ev();
extern void _ZN6S571C4D1Ev();
Name_Map name_map_S571C4[] = {
  NSPAIR(_ZN6S571C4C1Ev),
  NSPAIR(_ZN6S571C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S571C5;
extern VTBL_ENTRY _ZTI6S571C5[];
extern  VTBL_ENTRY _ZTV6S571C5[];
static Base_Class bases_S571C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S571C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S571C4[];
extern void _ZN6S571C4D1Ev();
extern void _ZN6S571C4D0Ev();
extern void _ZN6S571C52v4Ev();
extern void _ZN6S571C52v5Ev();
extern void _ZN6S571C52v6Ev();
extern void _ZN6S571C52v7Ev();
extern void _ZN6S571C52v8Ev();
extern void _ZN6S571C52v9Ev();
extern void _ZN6S571C53v10Ev();
extern void _ZN6S571C53v11Ev();
extern void _ZN6S571C53v12Ev();
extern void _ZN6S571C53v13Ev();
extern void _ZN6S571C53v14Ev();
extern void _ZN6S571C53v15Ev();
extern void _ZN6S571C53v16Ev();
extern void _ZN6S571C53v17Ev();
extern void _ZN6S571C53v18Ev();
extern void _ZN6S571C53v19Ev();
extern void _ZN6S571C53v20Ev();
extern void _ZN6S571C53v21Ev();
extern void _ZN6S571C53v22Ev();
extern void _ZN6S571C53v23Ev();
extern void _ZN6S571C53v24Ev();
extern void _ZN6S571C53v25Ev();
extern void _ZN6S571C53v26Ev();
extern void _ZN6S571C53v27Ev();
extern void _ZN6S571C53v28Ev();
extern void _ZN6S571C53v29Ev();
extern void _ZN6S571C53v30Ev();
extern void _ZN6S571C53v31Ev();
extern void _ZN6S571C53v32Ev();
extern void _ZN6S571C53v33Ev();
extern void _ZN6S571C53v34Ev();
extern void _ZN6S571C53v35Ev();
extern void _ZN6S571C53v36Ev();
extern void _ZN6S571C53v37Ev();
extern void _ZN6S571C53v38Ev();
extern void _ZN6S571C53v39Ev();
extern void _ZN6S571C53v40Ev();
extern void _ZN6S571C53v41Ev();
extern void _ZN6S571C53v42Ev();
extern void _ZN6S571C53v43Ev();
extern void _ZN6S571C53v44Ev();
extern void _ZN6S571C53v45Ev();
extern void _ZN6S571C53v46Ev();
extern void _ZN6S571C53v47Ev();
extern void _ZN6S571C53v48Ev();
extern void _ZN6S571C53v49Ev();
extern void _ZN6S571C53v50Ev();
extern void _ZN6S571C53v51Ev();
extern void _ZN6S571C53v52Ev();
extern void _ZN6S571C53v53Ev();
extern void _ZN6S571C53v54Ev();
extern void _ZN6S571C53v55Ev();
extern void _ZN6S571C53v56Ev();
extern void _ZN6S571C53v57Ev();
extern void _ZN6S571C53v58Ev();
extern void _ZN6S571C53v59Ev();
extern void _ZN6S571C53v60Ev();
extern void _ZN6S571C53v61Ev();
extern void _ZN6S571C53v62Ev();
extern void _ZN6S571C53v63Ev();
extern void _ZN6S571C53v64Ev();
extern void _ZN6S571C53v65Ev();
extern void _ZN6S571C53v66Ev();
extern void _ZN6S571C53v67Ev();
extern void _ZN6S571C43v68Ev();
extern void _ZN6S571C43v69Ev();
extern void _ZN6S571C43v70Ev();
extern void _ZN6S571C43v71Ev();
extern void _ZN6S571C43v72Ev();
extern void _ZN6S571C43v73Ev();
extern void _ZN6S571C43v74Ev();
extern void _ZN6S571C43v75Ev();
extern void _ZN6S571C43v76Ev();
extern void _ZN6S571C43v77Ev();
extern void _ZN6S571C43v78Ev();
extern void _ZN6S571C43v79Ev();
extern void _ZN6S571C43v80Ev();
static  VTBL_ENTRY vtc_S571C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S571C4[0]),
  (VTBL_ENTRY)&_ZN6S571C4D1Ev,
  (VTBL_ENTRY)&_ZN6S571C4D0Ev,
  (VTBL_ENTRY)&_ZN6S571C52v4Ev,
  (VTBL_ENTRY)&_ZN6S571C52v5Ev,
  (VTBL_ENTRY)&_ZN6S571C52v6Ev,
  (VTBL_ENTRY)&_ZN6S571C52v7Ev,
  (VTBL_ENTRY)&_ZN6S571C52v8Ev,
  (VTBL_ENTRY)&_ZN6S571C52v9Ev,
  (VTBL_ENTRY)&_ZN6S571C53v10Ev,
  (VTBL_ENTRY)&_ZN6S571C53v11Ev,
  (VTBL_ENTRY)&_ZN6S571C53v12Ev,
  (VTBL_ENTRY)&_ZN6S571C53v13Ev,
  (VTBL_ENTRY)&_ZN6S571C53v14Ev,
  (VTBL_ENTRY)&_ZN6S571C53v15Ev,
  (VTBL_ENTRY)&_ZN6S571C53v16Ev,
  (VTBL_ENTRY)&_ZN6S571C53v17Ev,
  (VTBL_ENTRY)&_ZN6S571C53v18Ev,
  (VTBL_ENTRY)&_ZN6S571C53v19Ev,
  (VTBL_ENTRY)&_ZN6S571C53v20Ev,
  (VTBL_ENTRY)&_ZN6S571C53v21Ev,
  (VTBL_ENTRY)&_ZN6S571C53v22Ev,
  (VTBL_ENTRY)&_ZN6S571C53v23Ev,
  (VTBL_ENTRY)&_ZN6S571C53v24Ev,
  (VTBL_ENTRY)&_ZN6S571C53v25Ev,
  (VTBL_ENTRY)&_ZN6S571C53v26Ev,
  (VTBL_ENTRY)&_ZN6S571C53v27Ev,
  (VTBL_ENTRY)&_ZN6S571C53v28Ev,
  (VTBL_ENTRY)&_ZN6S571C53v29Ev,
  (VTBL_ENTRY)&_ZN6S571C53v30Ev,
  (VTBL_ENTRY)&_ZN6S571C53v31Ev,
  (VTBL_ENTRY)&_ZN6S571C53v32Ev,
  (VTBL_ENTRY)&_ZN6S571C53v33Ev,
  (VTBL_ENTRY)&_ZN6S571C53v34Ev,
  (VTBL_ENTRY)&_ZN6S571C53v35Ev,
  (VTBL_ENTRY)&_ZN6S571C53v36Ev,
  (VTBL_ENTRY)&_ZN6S571C53v37Ev,
  (VTBL_ENTRY)&_ZN6S571C53v38Ev,
  (VTBL_ENTRY)&_ZN6S571C53v39Ev,
  (VTBL_ENTRY)&_ZN6S571C53v40Ev,
  (VTBL_ENTRY)&_ZN6S571C53v41Ev,
  (VTBL_ENTRY)&_ZN6S571C53v42Ev,
  (VTBL_ENTRY)&_ZN6S571C53v43Ev,
  (VTBL_ENTRY)&_ZN6S571C53v44Ev,
  (VTBL_ENTRY)&_ZN6S571C53v45Ev,
  (VTBL_ENTRY)&_ZN6S571C53v46Ev,
  (VTBL_ENTRY)&_ZN6S571C53v47Ev,
  (VTBL_ENTRY)&_ZN6S571C53v48Ev,
  (VTBL_ENTRY)&_ZN6S571C53v49Ev,
  (VTBL_ENTRY)&_ZN6S571C53v50Ev,
  (VTBL_ENTRY)&_ZN6S571C53v51Ev,
  (VTBL_ENTRY)&_ZN6S571C53v52Ev,
  (VTBL_ENTRY)&_ZN6S571C53v53Ev,
  (VTBL_ENTRY)&_ZN6S571C53v54Ev,
  (VTBL_ENTRY)&_ZN6S571C53v55Ev,
  (VTBL_ENTRY)&_ZN6S571C53v56Ev,
  (VTBL_ENTRY)&_ZN6S571C53v57Ev,
  (VTBL_ENTRY)&_ZN6S571C53v58Ev,
  (VTBL_ENTRY)&_ZN6S571C53v59Ev,
  (VTBL_ENTRY)&_ZN6S571C53v60Ev,
  (VTBL_ENTRY)&_ZN6S571C53v61Ev,
  (VTBL_ENTRY)&_ZN6S571C53v62Ev,
  (VTBL_ENTRY)&_ZN6S571C53v63Ev,
  (VTBL_ENTRY)&_ZN6S571C53v64Ev,
  (VTBL_ENTRY)&_ZN6S571C53v65Ev,
  (VTBL_ENTRY)&_ZN6S571C53v66Ev,
  (VTBL_ENTRY)&_ZN6S571C53v67Ev,
  (VTBL_ENTRY)&_ZN6S571C43v68Ev,
  (VTBL_ENTRY)&_ZN6S571C43v69Ev,
  (VTBL_ENTRY)&_ZN6S571C43v70Ev,
  (VTBL_ENTRY)&_ZN6S571C43v71Ev,
  (VTBL_ENTRY)&_ZN6S571C43v72Ev,
  (VTBL_ENTRY)&_ZN6S571C43v73Ev,
  (VTBL_ENTRY)&_ZN6S571C43v74Ev,
  (VTBL_ENTRY)&_ZN6S571C43v75Ev,
  (VTBL_ENTRY)&_ZN6S571C43v76Ev,
  (VTBL_ENTRY)&_ZN6S571C43v77Ev,
  (VTBL_ENTRY)&_ZN6S571C43v78Ev,
  (VTBL_ENTRY)&_ZN6S571C43v79Ev,
  (VTBL_ENTRY)&_ZN6S571C43v80Ev,
};
extern VTBL_ENTRY _ZTI6S571C4[];
extern  VTBL_ENTRY _ZTV6S571C4[];
Class_Descriptor cd_S571C4 = {  "S571C4", // class name
  bases_S571C4, 1,
  &(vtc_S571C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI6S571C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S571C4),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S571C3  : S571C4 {
  unsigned int s571c3f0:1;
  unsigned int s571c3f1:1;
  unsigned int s571c3f2:1;
  unsigned int s571c3f3:1;
  ::S664C12_nt s571c3f4;
  char s571c3f5[2];
  ::S273C7_nt s571c3f6;
  ::S632C13 s571c3f7;
  ::S273C7_nt s571c3f8;
  virtual  ~S571C3(); // _ZN6S571C3D1Ev
  virtual void  v81(); // _ZN6S571C33v81Ev
  virtual void  v82(); // _ZN6S571C33v82Ev
  virtual void  v83(); // _ZN6S571C33v83Ev
  virtual void  v84(); // _ZN6S571C33v84Ev
  virtual void  v85(); // _ZN6S571C33v85Ev
  virtual void  v86(); // _ZN6S571C33v86Ev
  virtual void  v87(); // _ZN6S571C33v87Ev
  S571C3(); // tgen
};
//SIG(-1 S571C3) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S571C3 ::~S571C3(){ note_dtor("S571C3", this);}
void  S571C3 ::v81(){vfunc_called(this, "_ZN6S571C33v81Ev");}
void  S571C3 ::v82(){vfunc_called(this, "_ZN6S571C33v82Ev");}
void  S571C3 ::v83(){vfunc_called(this, "_ZN6S571C33v83Ev");}
void  S571C3 ::v84(){vfunc_called(this, "_ZN6S571C33v84Ev");}
void  S571C3 ::v85(){vfunc_called(this, "_ZN6S571C33v85Ev");}
void  S571C3 ::v86(){vfunc_called(this, "_ZN6S571C33v86Ev");}
void  S571C3 ::v87(){vfunc_called(this, "_ZN6S571C33v87Ev");}
S571C3 ::S571C3(){ note_ctor("S571C3", this);} // tgen

static void Test_S571C3()
{
  extern Class_Descriptor cd_S571C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S571C3, buf);
    S571C3 *dp, &lv = *(dp=new (buf) S571C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S571C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S571C3)");
    check_base_class_offset(lv, (S571C5*)(S571C4*), 0, "S571C3");
    check_base_class_offset(lv, (S571C4*), 0, "S571C3");
    set_bf_and_test(lv, s571c3f0, ABISELECT(204,148), 0, 1, 1, "S571C3");
    set_bf_and_test(lv, s571c3f1, ABISELECT(204,148), 1, 1, 1, "S571C3");
    set_bf_and_test(lv, s571c3f2, ABISELECT(204,148), 2, 1, 1, "S571C3");
    set_bf_and_test(lv, s571c3f3, ABISELECT(204,148), 3, 1, 1, "S571C3");
    check_field_offset(lv, s571c3f4, ABISELECT(208,152), "S571C3.s571c3f4");
    check_field_offset(lv, s571c3f5, ABISELECT(220,164), "S571C3.s571c3f5");
    check_field_offset(lv, s571c3f6, ABISELECT(224,168), "S571C3.s571c3f6");
    check_field_offset(lv, s571c3f7, ABISELECT(232,176), "S571C3.s571c3f7");
    check_field_offset(lv, s571c3f8, ABISELECT(244,188), "S571C3.s571c3f8");
    test_class_info(&lv, &cd_S571C3);
    dp->~S571C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS571C3(Test_S571C3, "S571C3", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S571C3C1Ev();
extern void _ZN6S571C3D1Ev();
Name_Map name_map_S571C3[] = {
  NSPAIR(_ZN6S571C3C1Ev),
  NSPAIR(_ZN6S571C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S571C5;
extern VTBL_ENTRY _ZTI6S571C5[];
extern  VTBL_ENTRY _ZTV6S571C5[];
extern Class_Descriptor cd_S571C4;
extern VTBL_ENTRY _ZTI6S571C4[];
extern  VTBL_ENTRY _ZTV6S571C4[];
static Base_Class bases_S571C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S571C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S571C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S571C3[];
extern void _ZN6S571C3D1Ev();
extern void _ZN6S571C3D0Ev();
extern void _ZN6S571C52v4Ev();
extern void _ZN6S571C52v5Ev();
extern void _ZN6S571C52v6Ev();
extern void _ZN6S571C52v7Ev();
extern void _ZN6S571C52v8Ev();
extern void _ZN6S571C52v9Ev();
extern void _ZN6S571C53v10Ev();
extern void _ZN6S571C53v11Ev();
extern void _ZN6S571C53v12Ev();
extern void _ZN6S571C53v13Ev();
extern void _ZN6S571C53v14Ev();
extern void _ZN6S571C53v15Ev();
extern void _ZN6S571C53v16Ev();
extern void _ZN6S571C53v17Ev();
extern void _ZN6S571C53v18Ev();
extern void _ZN6S571C53v19Ev();
extern void _ZN6S571C53v20Ev();
extern void _ZN6S571C53v21Ev();
extern void _ZN6S571C53v22Ev();
extern void _ZN6S571C53v23Ev();
extern void _ZN6S571C53v24Ev();
extern void _ZN6S571C53v25Ev();
extern void _ZN6S571C53v26Ev();
extern void _ZN6S571C53v27Ev();
extern void _ZN6S571C53v28Ev();
extern void _ZN6S571C53v29Ev();
extern void _ZN6S571C53v30Ev();
extern void _ZN6S571C53v31Ev();
extern void _ZN6S571C53v32Ev();
extern void _ZN6S571C53v33Ev();
extern void _ZN6S571C53v34Ev();
extern void _ZN6S571C53v35Ev();
extern void _ZN6S571C53v36Ev();
extern void _ZN6S571C53v37Ev();
extern void _ZN6S571C53v38Ev();
extern void _ZN6S571C53v39Ev();
extern void _ZN6S571C53v40Ev();
extern void _ZN6S571C53v41Ev();
extern void _ZN6S571C53v42Ev();
extern void _ZN6S571C53v43Ev();
extern void _ZN6S571C53v44Ev();
extern void _ZN6S571C53v45Ev();
extern void _ZN6S571C53v46Ev();
extern void _ZN6S571C53v47Ev();
extern void _ZN6S571C53v48Ev();
extern void _ZN6S571C53v49Ev();
extern void _ZN6S571C53v50Ev();
extern void _ZN6S571C53v51Ev();
extern void _ZN6S571C53v52Ev();
extern void _ZN6S571C53v53Ev();
extern void _ZN6S571C53v54Ev();
extern void _ZN6S571C53v55Ev();
extern void _ZN6S571C53v56Ev();
extern void _ZN6S571C53v57Ev();
extern void _ZN6S571C53v58Ev();
extern void _ZN6S571C53v59Ev();
extern void _ZN6S571C53v60Ev();
extern void _ZN6S571C53v61Ev();
extern void _ZN6S571C53v62Ev();
extern void _ZN6S571C53v63Ev();
extern void _ZN6S571C53v64Ev();
extern void _ZN6S571C53v65Ev();
extern void _ZN6S571C53v66Ev();
extern void _ZN6S571C53v67Ev();
extern void _ZN6S571C43v68Ev();
extern void _ZN6S571C43v69Ev();
extern void _ZN6S571C43v70Ev();
extern void _ZN6S571C43v71Ev();
extern void _ZN6S571C43v72Ev();
extern void _ZN6S571C43v73Ev();
extern void _ZN6S571C43v74Ev();
extern void _ZN6S571C43v75Ev();
extern void _ZN6S571C43v76Ev();
extern void _ZN6S571C43v77Ev();
extern void _ZN6S571C43v78Ev();
extern void _ZN6S571C43v79Ev();
extern void _ZN6S571C43v80Ev();
extern void _ZN6S571C33v81Ev();
extern void _ZN6S571C33v82Ev();
extern void _ZN6S571C33v83Ev();
extern void _ZN6S571C33v84Ev();
extern void _ZN6S571C33v85Ev();
extern void _ZN6S571C33v86Ev();
extern void _ZN6S571C33v87Ev();
static  VTBL_ENTRY vtc_S571C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S571C3[0]),
  (VTBL_ENTRY)&_ZN6S571C3D1Ev,
  (VTBL_ENTRY)&_ZN6S571C3D0Ev,
  (VTBL_ENTRY)&_ZN6S571C52v4Ev,
  (VTBL_ENTRY)&_ZN6S571C52v5Ev,
  (VTBL_ENTRY)&_ZN6S571C52v6Ev,
  (VTBL_ENTRY)&_ZN6S571C52v7Ev,
  (VTBL_ENTRY)&_ZN6S571C52v8Ev,
  (VTBL_ENTRY)&_ZN6S571C52v9Ev,
  (VTBL_ENTRY)&_ZN6S571C53v10Ev,
  (VTBL_ENTRY)&_ZN6S571C53v11Ev,
  (VTBL_ENTRY)&_ZN6S571C53v12Ev,
  (VTBL_ENTRY)&_ZN6S571C53v13Ev,
  (VTBL_ENTRY)&_ZN6S571C53v14Ev,
  (VTBL_ENTRY)&_ZN6S571C53v15Ev,
  (VTBL_ENTRY)&_ZN6S571C53v16Ev,
  (VTBL_ENTRY)&_ZN6S571C53v17Ev,
  (VTBL_ENTRY)&_ZN6S571C53v18Ev,
  (VTBL_ENTRY)&_ZN6S571C53v19Ev,
  (VTBL_ENTRY)&_ZN6S571C53v20Ev,
  (VTBL_ENTRY)&_ZN6S571C53v21Ev,
  (VTBL_ENTRY)&_ZN6S571C53v22Ev,
  (VTBL_ENTRY)&_ZN6S571C53v23Ev,
  (VTBL_ENTRY)&_ZN6S571C53v24Ev,
  (VTBL_ENTRY)&_ZN6S571C53v25Ev,
  (VTBL_ENTRY)&_ZN6S571C53v26Ev,
  (VTBL_ENTRY)&_ZN6S571C53v27Ev,
  (VTBL_ENTRY)&_ZN6S571C53v28Ev,
  (VTBL_ENTRY)&_ZN6S571C53v29Ev,
  (VTBL_ENTRY)&_ZN6S571C53v30Ev,
  (VTBL_ENTRY)&_ZN6S571C53v31Ev,
  (VTBL_ENTRY)&_ZN6S571C53v32Ev,
  (VTBL_ENTRY)&_ZN6S571C53v33Ev,
  (VTBL_ENTRY)&_ZN6S571C53v34Ev,
  (VTBL_ENTRY)&_ZN6S571C53v35Ev,
  (VTBL_ENTRY)&_ZN6S571C53v36Ev,
  (VTBL_ENTRY)&_ZN6S571C53v37Ev,
  (VTBL_ENTRY)&_ZN6S571C53v38Ev,
  (VTBL_ENTRY)&_ZN6S571C53v39Ev,
  (VTBL_ENTRY)&_ZN6S571C53v40Ev,
  (VTBL_ENTRY)&_ZN6S571C53v41Ev,
  (VTBL_ENTRY)&_ZN6S571C53v42Ev,
  (VTBL_ENTRY)&_ZN6S571C53v43Ev,
  (VTBL_ENTRY)&_ZN6S571C53v44Ev,
  (VTBL_ENTRY)&_ZN6S571C53v45Ev,
  (VTBL_ENTRY)&_ZN6S571C53v46Ev,
  (VTBL_ENTRY)&_ZN6S571C53v47Ev,
  (VTBL_ENTRY)&_ZN6S571C53v48Ev,
  (VTBL_ENTRY)&_ZN6S571C53v49Ev,
  (VTBL_ENTRY)&_ZN6S571C53v50Ev,
  (VTBL_ENTRY)&_ZN6S571C53v51Ev,
  (VTBL_ENTRY)&_ZN6S571C53v52Ev,
  (VTBL_ENTRY)&_ZN6S571C53v53Ev,
  (VTBL_ENTRY)&_ZN6S571C53v54Ev,
  (VTBL_ENTRY)&_ZN6S571C53v55Ev,
  (VTBL_ENTRY)&_ZN6S571C53v56Ev,
  (VTBL_ENTRY)&_ZN6S571C53v57Ev,
  (VTBL_ENTRY)&_ZN6S571C53v58Ev,
  (VTBL_ENTRY)&_ZN6S571C53v59Ev,
  (VTBL_ENTRY)&_ZN6S571C53v60Ev,
  (VTBL_ENTRY)&_ZN6S571C53v61Ev,
  (VTBL_ENTRY)&_ZN6S571C53v62Ev,
  (VTBL_ENTRY)&_ZN6S571C53v63Ev,
  (VTBL_ENTRY)&_ZN6S571C53v64Ev,
  (VTBL_ENTRY)&_ZN6S571C53v65Ev,
  (VTBL_ENTRY)&_ZN6S571C53v66Ev,
  (VTBL_ENTRY)&_ZN6S571C53v67Ev,
  (VTBL_ENTRY)&_ZN6S571C43v68Ev,
  (VTBL_ENTRY)&_ZN6S571C43v69Ev,
  (VTBL_ENTRY)&_ZN6S571C43v70Ev,
  (VTBL_ENTRY)&_ZN6S571C43v71Ev,
  (VTBL_ENTRY)&_ZN6S571C43v72Ev,
  (VTBL_ENTRY)&_ZN6S571C43v73Ev,
  (VTBL_ENTRY)&_ZN6S571C43v74Ev,
  (VTBL_ENTRY)&_ZN6S571C43v75Ev,
  (VTBL_ENTRY)&_ZN6S571C43v76Ev,
  (VTBL_ENTRY)&_ZN6S571C43v77Ev,
  (VTBL_ENTRY)&_ZN6S571C43v78Ev,
  (VTBL_ENTRY)&_ZN6S571C43v79Ev,
  (VTBL_ENTRY)&_ZN6S571C43v80Ev,
  (VTBL_ENTRY)&_ZN6S571C33v81Ev,
  (VTBL_ENTRY)&_ZN6S571C33v82Ev,
  (VTBL_ENTRY)&_ZN6S571C33v83Ev,
  (VTBL_ENTRY)&_ZN6S571C33v84Ev,
  (VTBL_ENTRY)&_ZN6S571C33v85Ev,
  (VTBL_ENTRY)&_ZN6S571C33v86Ev,
  (VTBL_ENTRY)&_ZN6S571C33v87Ev,
};
extern VTBL_ENTRY _ZTI6S571C3[];
extern  VTBL_ENTRY _ZTV6S571C3[];
Class_Descriptor cd_S571C3 = {  "S571C3", // class name
  bases_S571C3, 2,
  &(vtc_S571C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S571C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S571C3),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S571C2  : S571C3 {
  unsigned int s571c2f0:1;
  unsigned int s571c2f1:1;
  unsigned int s571c2f2:1;
  unsigned int s571c2f3:1;
  unsigned int s571c2f4:1;
  void *s571c2f5;
  int s571c2f6[4];
  void *s571c2f7;
  int s571c2f8[2];
  ::S664C12_nt s571c2f9;
  ::S664C12_nt s571c2f10;
  void *s571c2f11[2];
  unsigned int s571c2f12:1;
  unsigned int s571c2f13:1;
  ::S273C7_nt s571c2f14;
  int s571c2f15[2];
  ::S664C12_nt s571c2f16;
  int s571c2f17[2];
  void *s571c2f18;
  ::S664C12_nt s571c2f19;
  ::S664C12_nt s571c2f20;
  void *s571c2f21[2];
  virtual  ~S571C2(); // _ZN6S571C2D1Ev
  virtual void  v88(); // _ZN6S571C23v88Ev
  virtual void  v89(); // _ZN6S571C23v89Ev
  virtual void  v90(); // _ZN6S571C23v90Ev
  virtual void  v91(); // _ZN6S571C23v91Ev
  virtual void  v92(); // _ZN6S571C23v92Ev
  virtual void  v93(); // _ZN6S571C23v93Ev
  S571C2(); // tgen
};
//SIG(-1 S571C2) C1{ BC2{ BC3{ BC4{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v84 v85 v86 v87 v88 v89 v90 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 v4 v5 v6 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fp Fi[4] Fp Fi[2] FC11 FC11 Fp[2] Fi:1 Fi:1 FC5 Fi[2] FC11 Fi[2] Fp FC11 FC11 Fp[2]}


 S571C2 ::~S571C2(){ note_dtor("S571C2", this);}
void  S571C2 ::v88(){vfunc_called(this, "_ZN6S571C23v88Ev");}
void  S571C2 ::v89(){vfunc_called(this, "_ZN6S571C23v89Ev");}
void  S571C2 ::v90(){vfunc_called(this, "_ZN6S571C23v90Ev");}
void  S571C2 ::v91(){vfunc_called(this, "_ZN6S571C23v91Ev");}
void  S571C2 ::v92(){vfunc_called(this, "_ZN6S571C23v92Ev");}
void  S571C2 ::v93(){vfunc_called(this, "_ZN6S571C23v93Ev");}
S571C2 ::S571C2(){ note_ctor("S571C2", this);} // tgen

static void Test_S571C2()
{
  extern Class_Descriptor cd_S571C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,86)];
    init_test(&cd_S571C2, buf);
    S571C2 *dp, &lv = *(dp=new (buf) S571C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,340), "sizeof(S571C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S571C2)");
    check_base_class_offset(lv, (S571C5*)(S571C4*)(S571C3*), 0, "S571C2");
    check_base_class_offset(lv, (S571C4*)(S571C3*), 0, "S571C2");
    check_base_class_offset(lv, (S571C3*), 0, "S571C2");
    set_bf_and_test(lv, s571c2f0, ABISELECT(252,196), 0, 1, 1, "S571C2");
    set_bf_and_test(lv, s571c2f1, ABISELECT(252,196), 1, 1, 1, "S571C2");
    set_bf_and_test(lv, s571c2f2, ABISELECT(252,196), 2, 1, 1, "S571C2");
    set_bf_and_test(lv, s571c2f3, ABISELECT(252,196), 3, 1, 1, "S571C2");
    set_bf_and_test(lv, s571c2f4, ABISELECT(252,196), 4, 1, 1, "S571C2");
    check_field_offset(lv, s571c2f5, ABISELECT(256,200), "S571C2.s571c2f5");
    check_field_offset(lv, s571c2f6, ABISELECT(264,204), "S571C2.s571c2f6");
    check_field_offset(lv, s571c2f7, ABISELECT(280,220), "S571C2.s571c2f7");
    check_field_offset(lv, s571c2f8, ABISELECT(288,224), "S571C2.s571c2f8");
    check_field_offset(lv, s571c2f9, ABISELECT(296,232), "S571C2.s571c2f9");
    check_field_offset(lv, s571c2f10, ABISELECT(308,244), "S571C2.s571c2f10");
    check_field_offset(lv, s571c2f11, ABISELECT(320,256), "S571C2.s571c2f11");
    set_bf_and_test(lv, s571c2f12, ABISELECT(336,264), 0, 1, 1, "S571C2");
    set_bf_and_test(lv, s571c2f13, ABISELECT(336,264), 1, 1, 1, "S571C2");
    check_field_offset(lv, s571c2f14, ABISELECT(340,268), "S571C2.s571c2f14");
    check_field_offset(lv, s571c2f15, ABISELECT(348,276), "S571C2.s571c2f15");
    check_field_offset(lv, s571c2f16, ABISELECT(356,284), "S571C2.s571c2f16");
    check_field_offset(lv, s571c2f17, ABISELECT(368,296), "S571C2.s571c2f17");
    check_field_offset(lv, s571c2f18, ABISELECT(376,304), "S571C2.s571c2f18");
    check_field_offset(lv, s571c2f19, ABISELECT(384,308), "S571C2.s571c2f19");
    check_field_offset(lv, s571c2f20, ABISELECT(396,320), "S571C2.s571c2f20");
    check_field_offset(lv, s571c2f21, ABISELECT(408,332), "S571C2.s571c2f21");
    test_class_info(&lv, &cd_S571C2);
    dp->~S571C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS571C2(Test_S571C2, "S571C2", ABISELECT(424,340));

#else // __cplusplus

extern void _ZN6S571C2C1Ev();
extern void _ZN6S571C2D1Ev();
Name_Map name_map_S571C2[] = {
  NSPAIR(_ZN6S571C2C1Ev),
  NSPAIR(_ZN6S571C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S571C5;
extern VTBL_ENTRY _ZTI6S571C5[];
extern  VTBL_ENTRY _ZTV6S571C5[];
extern Class_Descriptor cd_S571C4;
extern VTBL_ENTRY _ZTI6S571C4[];
extern  VTBL_ENTRY _ZTV6S571C4[];
extern Class_Descriptor cd_S571C3;
extern VTBL_ENTRY _ZTI6S571C3[];
extern  VTBL_ENTRY _ZTV6S571C3[];
static Base_Class bases_S571C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S571C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S571C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S571C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S571C2[];
extern void _ZN6S571C2D1Ev();
extern void _ZN6S571C2D0Ev();
extern void _ZN6S571C52v4Ev();
extern void _ZN6S571C52v5Ev();
extern void _ZN6S571C52v6Ev();
extern void _ZN6S571C52v7Ev();
extern void _ZN6S571C52v8Ev();
extern void _ZN6S571C52v9Ev();
extern void _ZN6S571C53v10Ev();
extern void _ZN6S571C53v11Ev();
extern void _ZN6S571C53v12Ev();
extern void _ZN6S571C53v13Ev();
extern void _ZN6S571C53v14Ev();
extern void _ZN6S571C53v15Ev();
extern void _ZN6S571C53v16Ev();
extern void _ZN6S571C53v17Ev();
extern void _ZN6S571C53v18Ev();
extern void _ZN6S571C53v19Ev();
extern void _ZN6S571C53v20Ev();
extern void _ZN6S571C53v21Ev();
extern void _ZN6S571C53v22Ev();
extern void _ZN6S571C53v23Ev();
extern void _ZN6S571C53v24Ev();
extern void _ZN6S571C53v25Ev();
extern void _ZN6S571C53v26Ev();
extern void _ZN6S571C53v27Ev();
extern void _ZN6S571C53v28Ev();
extern void _ZN6S571C53v29Ev();
extern void _ZN6S571C53v30Ev();
extern void _ZN6S571C53v31Ev();
extern void _ZN6S571C53v32Ev();
extern void _ZN6S571C53v33Ev();
extern void _ZN6S571C53v34Ev();
extern void _ZN6S571C53v35Ev();
extern void _ZN6S571C53v36Ev();
extern void _ZN6S571C53v37Ev();
extern void _ZN6S571C53v38Ev();
extern void _ZN6S571C53v39Ev();
extern void _ZN6S571C53v40Ev();
extern void _ZN6S571C53v41Ev();
extern void _ZN6S571C53v42Ev();
extern void _ZN6S571C53v43Ev();
extern void _ZN6S571C53v44Ev();
extern void _ZN6S571C53v45Ev();
extern void _ZN6S571C53v46Ev();
extern void _ZN6S571C53v47Ev();
extern void _ZN6S571C53v48Ev();
extern void _ZN6S571C53v49Ev();
extern void _ZN6S571C53v50Ev();
extern void _ZN6S571C53v51Ev();
extern void _ZN6S571C53v52Ev();
extern void _ZN6S571C53v53Ev();
extern void _ZN6S571C53v54Ev();
extern void _ZN6S571C53v55Ev();
extern void _ZN6S571C53v56Ev();
extern void _ZN6S571C53v57Ev();
extern void _ZN6S571C53v58Ev();
extern void _ZN6S571C53v59Ev();
extern void _ZN6S571C53v60Ev();
extern void _ZN6S571C53v61Ev();
extern void _ZN6S571C53v62Ev();
extern void _ZN6S571C53v63Ev();
extern void _ZN6S571C53v64Ev();
extern void _ZN6S571C53v65Ev();
extern void _ZN6S571C53v66Ev();
extern void _ZN6S571C53v67Ev();
extern void _ZN6S571C43v68Ev();
extern void _ZN6S571C43v69Ev();
extern void _ZN6S571C43v70Ev();
extern void _ZN6S571C43v71Ev();
extern void _ZN6S571C43v72Ev();
extern void _ZN6S571C43v73Ev();
extern void _ZN6S571C43v74Ev();
extern void _ZN6S571C43v75Ev();
extern void _ZN6S571C43v76Ev();
extern void _ZN6S571C43v77Ev();
extern void _ZN6S571C43v78Ev();
extern void _ZN6S571C43v79Ev();
extern void _ZN6S571C43v80Ev();
extern void _ZN6S571C33v81Ev();
extern void _ZN6S571C33v82Ev();
extern void _ZN6S571C33v83Ev();
extern void _ZN6S571C33v84Ev();
extern void _ZN6S571C33v85Ev();
extern void _ZN6S571C33v86Ev();
extern void _ZN6S571C33v87Ev();
extern void _ZN6S571C23v88Ev();
extern void _ZN6S571C23v89Ev();
extern void _ZN6S571C23v90Ev();
extern void _ZN6S571C23v91Ev();
extern void _ZN6S571C23v92Ev();
extern void _ZN6S571C23v93Ev();
static  VTBL_ENTRY vtc_S571C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S571C2[0]),
  (VTBL_ENTRY)&_ZN6S571C2D1Ev,
  (VTBL_ENTRY)&_ZN6S571C2D0Ev,
  (VTBL_ENTRY)&_ZN6S571C52v4Ev,
  (VTBL_ENTRY)&_ZN6S571C52v5Ev,
  (VTBL_ENTRY)&_ZN6S571C52v6Ev,
  (VTBL_ENTRY)&_ZN6S571C52v7Ev,
  (VTBL_ENTRY)&_ZN6S571C52v8Ev,
  (VTBL_ENTRY)&_ZN6S571C52v9Ev,
  (VTBL_ENTRY)&_ZN6S571C53v10Ev,
  (VTBL_ENTRY)&_ZN6S571C53v11Ev,
  (VTBL_ENTRY)&_ZN6S571C53v12Ev,
  (VTBL_ENTRY)&_ZN6S571C53v13Ev,
  (VTBL_ENTRY)&_ZN6S571C53v14Ev,
  (VTBL_ENTRY)&_ZN6S571C53v15Ev,
  (VTBL_ENTRY)&_ZN6S571C53v16Ev,
  (VTBL_ENTRY)&_ZN6S571C53v17Ev,
  (VTBL_ENTRY)&_ZN6S571C53v18Ev,
  (VTBL_ENTRY)&_ZN6S571C53v19Ev,
  (VTBL_ENTRY)&_ZN6S571C53v20Ev,
  (VTBL_ENTRY)&_ZN6S571C53v21Ev,
  (VTBL_ENTRY)&_ZN6S571C53v22Ev,
  (VTBL_ENTRY)&_ZN6S571C53v23Ev,
  (VTBL_ENTRY)&_ZN6S571C53v24Ev,
  (VTBL_ENTRY)&_ZN6S571C53v25Ev,
  (VTBL_ENTRY)&_ZN6S571C53v26Ev,
  (VTBL_ENTRY)&_ZN6S571C53v27Ev,
  (VTBL_ENTRY)&_ZN6S571C53v28Ev,
  (VTBL_ENTRY)&_ZN6S571C53v29Ev,
  (VTBL_ENTRY)&_ZN6S571C53v30Ev,
  (VTBL_ENTRY)&_ZN6S571C53v31Ev,
  (VTBL_ENTRY)&_ZN6S571C53v32Ev,
  (VTBL_ENTRY)&_ZN6S571C53v33Ev,
  (VTBL_ENTRY)&_ZN6S571C53v34Ev,
  (VTBL_ENTRY)&_ZN6S571C53v35Ev,
  (VTBL_ENTRY)&_ZN6S571C53v36Ev,
  (VTBL_ENTRY)&_ZN6S571C53v37Ev,
  (VTBL_ENTRY)&_ZN6S571C53v38Ev,
  (VTBL_ENTRY)&_ZN6S571C53v39Ev,
  (VTBL_ENTRY)&_ZN6S571C53v40Ev,
  (VTBL_ENTRY)&_ZN6S571C53v41Ev,
  (VTBL_ENTRY)&_ZN6S571C53v42Ev,
  (VTBL_ENTRY)&_ZN6S571C53v43Ev,
  (VTBL_ENTRY)&_ZN6S571C53v44Ev,
  (VTBL_ENTRY)&_ZN6S571C53v45Ev,
  (VTBL_ENTRY)&_ZN6S571C53v46Ev,
  (VTBL_ENTRY)&_ZN6S571C53v47Ev,
  (VTBL_ENTRY)&_ZN6S571C53v48Ev,
  (VTBL_ENTRY)&_ZN6S571C53v49Ev,
  (VTBL_ENTRY)&_ZN6S571C53v50Ev,
  (VTBL_ENTRY)&_ZN6S571C53v51Ev,
  (VTBL_ENTRY)&_ZN6S571C53v52Ev,
  (VTBL_ENTRY)&_ZN6S571C53v53Ev,
  (VTBL_ENTRY)&_ZN6S571C53v54Ev,
  (VTBL_ENTRY)&_ZN6S571C53v55Ev,
  (VTBL_ENTRY)&_ZN6S571C53v56Ev,
  (VTBL_ENTRY)&_ZN6S571C53v57Ev,
  (VTBL_ENTRY)&_ZN6S571C53v58Ev,
  (VTBL_ENTRY)&_ZN6S571C53v59Ev,
  (VTBL_ENTRY)&_ZN6S571C53v60Ev,
  (VTBL_ENTRY)&_ZN6S571C53v61Ev,
  (VTBL_ENTRY)&_ZN6S571C53v62Ev,
  (VTBL_ENTRY)&_ZN6S571C53v63Ev,
  (VTBL_ENTRY)&_ZN6S571C53v64Ev,
  (VTBL_ENTRY)&_ZN6S571C53v65Ev,
  (VTBL_ENTRY)&_ZN6S571C53v66Ev,
  (VTBL_ENTRY)&_ZN6S571C53v67Ev,
  (VTBL_ENTRY)&_ZN6S571C43v68Ev,
  (VTBL_ENTRY)&_ZN6S571C43v69Ev,
  (VTBL_ENTRY)&_ZN6S571C43v70Ev,
  (VTBL_ENTRY)&_ZN6S571C43v71Ev,
  (VTBL_ENTRY)&_ZN6S571C43v72Ev,
  (VTBL_ENTRY)&_ZN6S571C43v73Ev,
  (VTBL_ENTRY)&_ZN6S571C43v74Ev,
  (VTBL_ENTRY)&_ZN6S571C43v75Ev,
  (VTBL_ENTRY)&_ZN6S571C43v76Ev,
  (VTBL_ENTRY)&_ZN6S571C43v77Ev,
  (VTBL_ENTRY)&_ZN6S571C43v78Ev,
  (VTBL_ENTRY)&_ZN6S571C43v79Ev,
  (VTBL_ENTRY)&_ZN6S571C43v80Ev,
  (VTBL_ENTRY)&_ZN6S571C33v81Ev,
  (VTBL_ENTRY)&_ZN6S571C33v82Ev,
  (VTBL_ENTRY)&_ZN6S571C33v83Ev,
  (VTBL_ENTRY)&_ZN6S571C33v84Ev,
  (VTBL_ENTRY)&_ZN6S571C33v85Ev,
  (VTBL_ENTRY)&_ZN6S571C33v86Ev,
  (VTBL_ENTRY)&_ZN6S571C33v87Ev,
  (VTBL_ENTRY)&_ZN6S571C23v88Ev,
  (VTBL_ENTRY)&_ZN6S571C23v89Ev,
  (VTBL_ENTRY)&_ZN6S571C23v90Ev,
  (VTBL_ENTRY)&_ZN6S571C23v91Ev,
  (VTBL_ENTRY)&_ZN6S571C23v92Ev,
  (VTBL_ENTRY)&_ZN6S571C23v93Ev,
};
extern VTBL_ENTRY _ZTI6S571C2[];
extern  VTBL_ENTRY _ZTV6S571C2[];
Class_Descriptor cd_S571C2 = {  "S571C2", // class name
  bases_S571C2, 3,
  &(vtc_S571C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,340), // object size
  NSPAIRA(_ZTI6S571C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S571C2),94, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S571C1  : S571C2 {
  int s571c1f0;
  char s571c1f1;
  int s571c1f2[3];
  virtual  ~S571C1(); // _ZN6S571C1D1Ev
  virtual void  v1(); // _ZN6S571C12v1Ev
  virtual void  v2(); // _ZN6S571C12v2Ev
  virtual void  v3(); // _ZN6S571C12v3Ev
  S571C1(); // tgen
};
//SIG(1 S571C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC6 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC10{ BC11{ BC9}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 FC12{ m Fi[3]} Fc[2] FC6 FC13{ m Fi[3]} FC6} vd v88 v89 v90 v91 v92 v93 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fp Fi[4] Fp Fi[2] FC12 FC12 Fp[2] Fi:1 Fi:1 FC6 Fi[2] FC12 Fi[2] Fp FC12 FC12 Fp[2]} vd v1 v2 v3 Fi Fc Fi[3]}


 S571C1 ::~S571C1(){ note_dtor("S571C1", this);}
void  S571C1 ::v1(){vfunc_called(this, "_ZN6S571C12v1Ev");}
void  S571C1 ::v2(){vfunc_called(this, "_ZN6S571C12v2Ev");}
void  S571C1 ::v3(){vfunc_called(this, "_ZN6S571C12v3Ev");}
S571C1 ::S571C1(){ note_ctor("S571C1", this);} // tgen

static void Test_S571C1()
{
  extern Class_Descriptor cd_S571C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(57,91)];
    init_test(&cd_S571C1, buf);
    S571C1 *dp, &lv = *(dp=new (buf) S571C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,360), "sizeof(S571C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S571C1)");
    check_base_class_offset(lv, (S571C5*)(S571C4*)(S571C3*)(S571C2*), 0, "S571C1");
    check_base_class_offset(lv, (S571C4*)(S571C3*)(S571C2*), 0, "S571C1");
    check_base_class_offset(lv, (S571C3*)(S571C2*), 0, "S571C1");
    check_base_class_offset(lv, (S571C2*), 0, "S571C1");
    check_field_offset(lv, s571c1f0, ABISELECT(424,340), "S571C1.s571c1f0");
    check_field_offset(lv, s571c1f1, ABISELECT(428,344), "S571C1.s571c1f1");
    check_field_offset(lv, s571c1f2, ABISELECT(432,348), "S571C1.s571c1f2");
    test_class_info(&lv, &cd_S571C1);
    dp->~S571C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS571C1(Test_S571C1, "S571C1", ABISELECT(448,360));

#else // __cplusplus

extern void _ZN6S571C1C1Ev();
extern void _ZN6S571C1D1Ev();
Name_Map name_map_S571C1[] = {
  NSPAIR(_ZN6S571C1C1Ev),
  NSPAIR(_ZN6S571C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S571C5;
extern VTBL_ENTRY _ZTI6S571C5[];
extern  VTBL_ENTRY _ZTV6S571C5[];
extern Class_Descriptor cd_S571C4;
extern VTBL_ENTRY _ZTI6S571C4[];
extern  VTBL_ENTRY _ZTV6S571C4[];
extern Class_Descriptor cd_S571C3;
extern VTBL_ENTRY _ZTI6S571C3[];
extern  VTBL_ENTRY _ZTV6S571C3[];
extern Class_Descriptor cd_S571C2;
extern VTBL_ENTRY _ZTI6S571C2[];
extern  VTBL_ENTRY _ZTV6S571C2[];
static Base_Class bases_S571C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S571C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S571C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S571C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S571C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S571C1[];
extern void _ZN6S571C1D1Ev();
extern void _ZN6S571C1D0Ev();
extern void _ZN6S571C52v4Ev();
extern void _ZN6S571C52v5Ev();
extern void _ZN6S571C52v6Ev();
extern void _ZN6S571C52v7Ev();
extern void _ZN6S571C52v8Ev();
extern void _ZN6S571C52v9Ev();
extern void _ZN6S571C53v10Ev();
extern void _ZN6S571C53v11Ev();
extern void _ZN6S571C53v12Ev();
extern void _ZN6S571C53v13Ev();
extern void _ZN6S571C53v14Ev();
extern void _ZN6S571C53v15Ev();
extern void _ZN6S571C53v16Ev();
extern void _ZN6S571C53v17Ev();
extern void _ZN6S571C53v18Ev();
extern void _ZN6S571C53v19Ev();
extern void _ZN6S571C53v20Ev();
extern void _ZN6S571C53v21Ev();
extern void _ZN6S571C53v22Ev();
extern void _ZN6S571C53v23Ev();
extern void _ZN6S571C53v24Ev();
extern void _ZN6S571C53v25Ev();
extern void _ZN6S571C53v26Ev();
extern void _ZN6S571C53v27Ev();
extern void _ZN6S571C53v28Ev();
extern void _ZN6S571C53v29Ev();
extern void _ZN6S571C53v30Ev();
extern void _ZN6S571C53v31Ev();
extern void _ZN6S571C53v32Ev();
extern void _ZN6S571C53v33Ev();
extern void _ZN6S571C53v34Ev();
extern void _ZN6S571C53v35Ev();
extern void _ZN6S571C53v36Ev();
extern void _ZN6S571C53v37Ev();
extern void _ZN6S571C53v38Ev();
extern void _ZN6S571C53v39Ev();
extern void _ZN6S571C53v40Ev();
extern void _ZN6S571C53v41Ev();
extern void _ZN6S571C53v42Ev();
extern void _ZN6S571C53v43Ev();
extern void _ZN6S571C53v44Ev();
extern void _ZN6S571C53v45Ev();
extern void _ZN6S571C53v46Ev();
extern void _ZN6S571C53v47Ev();
extern void _ZN6S571C53v48Ev();
extern void _ZN6S571C53v49Ev();
extern void _ZN6S571C53v50Ev();
extern void _ZN6S571C53v51Ev();
extern void _ZN6S571C53v52Ev();
extern void _ZN6S571C53v53Ev();
extern void _ZN6S571C53v54Ev();
extern void _ZN6S571C53v55Ev();
extern void _ZN6S571C53v56Ev();
extern void _ZN6S571C53v57Ev();
extern void _ZN6S571C53v58Ev();
extern void _ZN6S571C53v59Ev();
extern void _ZN6S571C53v60Ev();
extern void _ZN6S571C53v61Ev();
extern void _ZN6S571C53v62Ev();
extern void _ZN6S571C53v63Ev();
extern void _ZN6S571C53v64Ev();
extern void _ZN6S571C53v65Ev();
extern void _ZN6S571C53v66Ev();
extern void _ZN6S571C53v67Ev();
extern void _ZN6S571C43v68Ev();
extern void _ZN6S571C43v69Ev();
extern void _ZN6S571C43v70Ev();
extern void _ZN6S571C43v71Ev();
extern void _ZN6S571C43v72Ev();
extern void _ZN6S571C43v73Ev();
extern void _ZN6S571C43v74Ev();
extern void _ZN6S571C43v75Ev();
extern void _ZN6S571C43v76Ev();
extern void _ZN6S571C43v77Ev();
extern void _ZN6S571C43v78Ev();
extern void _ZN6S571C43v79Ev();
extern void _ZN6S571C43v80Ev();
extern void _ZN6S571C33v81Ev();
extern void _ZN6S571C33v82Ev();
extern void _ZN6S571C33v83Ev();
extern void _ZN6S571C33v84Ev();
extern void _ZN6S571C33v85Ev();
extern void _ZN6S571C33v86Ev();
extern void _ZN6S571C33v87Ev();
extern void _ZN6S571C23v88Ev();
extern void _ZN6S571C23v89Ev();
extern void _ZN6S571C23v90Ev();
extern void _ZN6S571C23v91Ev();
extern void _ZN6S571C23v92Ev();
extern void _ZN6S571C23v93Ev();
extern void _ZN6S571C12v1Ev();
extern void _ZN6S571C12v2Ev();
extern void _ZN6S571C12v3Ev();
static  VTBL_ENTRY vtc_S571C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S571C1[0]),
  (VTBL_ENTRY)&_ZN6S571C1D1Ev,
  (VTBL_ENTRY)&_ZN6S571C1D0Ev,
  (VTBL_ENTRY)&_ZN6S571C52v4Ev,
  (VTBL_ENTRY)&_ZN6S571C52v5Ev,
  (VTBL_ENTRY)&_ZN6S571C52v6Ev,
  (VTBL_ENTRY)&_ZN6S571C52v7Ev,
  (VTBL_ENTRY)&_ZN6S571C52v8Ev,
  (VTBL_ENTRY)&_ZN6S571C52v9Ev,
  (VTBL_ENTRY)&_ZN6S571C53v10Ev,
  (VTBL_ENTRY)&_ZN6S571C53v11Ev,
  (VTBL_ENTRY)&_ZN6S571C53v12Ev,
  (VTBL_ENTRY)&_ZN6S571C53v13Ev,
  (VTBL_ENTRY)&_ZN6S571C53v14Ev,
  (VTBL_ENTRY)&_ZN6S571C53v15Ev,
  (VTBL_ENTRY)&_ZN6S571C53v16Ev,
  (VTBL_ENTRY)&_ZN6S571C53v17Ev,
  (VTBL_ENTRY)&_ZN6S571C53v18Ev,
  (VTBL_ENTRY)&_ZN6S571C53v19Ev,
  (VTBL_ENTRY)&_ZN6S571C53v20Ev,
  (VTBL_ENTRY)&_ZN6S571C53v21Ev,
  (VTBL_ENTRY)&_ZN6S571C53v22Ev,
  (VTBL_ENTRY)&_ZN6S571C53v23Ev,
  (VTBL_ENTRY)&_ZN6S571C53v24Ev,
  (VTBL_ENTRY)&_ZN6S571C53v25Ev,
  (VTBL_ENTRY)&_ZN6S571C53v26Ev,
  (VTBL_ENTRY)&_ZN6S571C53v27Ev,
  (VTBL_ENTRY)&_ZN6S571C53v28Ev,
  (VTBL_ENTRY)&_ZN6S571C53v29Ev,
  (VTBL_ENTRY)&_ZN6S571C53v30Ev,
  (VTBL_ENTRY)&_ZN6S571C53v31Ev,
  (VTBL_ENTRY)&_ZN6S571C53v32Ev,
  (VTBL_ENTRY)&_ZN6S571C53v33Ev,
  (VTBL_ENTRY)&_ZN6S571C53v34Ev,
  (VTBL_ENTRY)&_ZN6S571C53v35Ev,
  (VTBL_ENTRY)&_ZN6S571C53v36Ev,
  (VTBL_ENTRY)&_ZN6S571C53v37Ev,
  (VTBL_ENTRY)&_ZN6S571C53v38Ev,
  (VTBL_ENTRY)&_ZN6S571C53v39Ev,
  (VTBL_ENTRY)&_ZN6S571C53v40Ev,
  (VTBL_ENTRY)&_ZN6S571C53v41Ev,
  (VTBL_ENTRY)&_ZN6S571C53v42Ev,
  (VTBL_ENTRY)&_ZN6S571C53v43Ev,
  (VTBL_ENTRY)&_ZN6S571C53v44Ev,
  (VTBL_ENTRY)&_ZN6S571C53v45Ev,
  (VTBL_ENTRY)&_ZN6S571C53v46Ev,
  (VTBL_ENTRY)&_ZN6S571C53v47Ev,
  (VTBL_ENTRY)&_ZN6S571C53v48Ev,
  (VTBL_ENTRY)&_ZN6S571C53v49Ev,
  (VTBL_ENTRY)&_ZN6S571C53v50Ev,
  (VTBL_ENTRY)&_ZN6S571C53v51Ev,
  (VTBL_ENTRY)&_ZN6S571C53v52Ev,
  (VTBL_ENTRY)&_ZN6S571C53v53Ev,
  (VTBL_ENTRY)&_ZN6S571C53v54Ev,
  (VTBL_ENTRY)&_ZN6S571C53v55Ev,
  (VTBL_ENTRY)&_ZN6S571C53v56Ev,
  (VTBL_ENTRY)&_ZN6S571C53v57Ev,
  (VTBL_ENTRY)&_ZN6S571C53v58Ev,
  (VTBL_ENTRY)&_ZN6S571C53v59Ev,
  (VTBL_ENTRY)&_ZN6S571C53v60Ev,
  (VTBL_ENTRY)&_ZN6S571C53v61Ev,
  (VTBL_ENTRY)&_ZN6S571C53v62Ev,
  (VTBL_ENTRY)&_ZN6S571C53v63Ev,
  (VTBL_ENTRY)&_ZN6S571C53v64Ev,
  (VTBL_ENTRY)&_ZN6S571C53v65Ev,
  (VTBL_ENTRY)&_ZN6S571C53v66Ev,
  (VTBL_ENTRY)&_ZN6S571C53v67Ev,
  (VTBL_ENTRY)&_ZN6S571C43v68Ev,
  (VTBL_ENTRY)&_ZN6S571C43v69Ev,
  (VTBL_ENTRY)&_ZN6S571C43v70Ev,
  (VTBL_ENTRY)&_ZN6S571C43v71Ev,
  (VTBL_ENTRY)&_ZN6S571C43v72Ev,
  (VTBL_ENTRY)&_ZN6S571C43v73Ev,
  (VTBL_ENTRY)&_ZN6S571C43v74Ev,
  (VTBL_ENTRY)&_ZN6S571C43v75Ev,
  (VTBL_ENTRY)&_ZN6S571C43v76Ev,
  (VTBL_ENTRY)&_ZN6S571C43v77Ev,
  (VTBL_ENTRY)&_ZN6S571C43v78Ev,
  (VTBL_ENTRY)&_ZN6S571C43v79Ev,
  (VTBL_ENTRY)&_ZN6S571C43v80Ev,
  (VTBL_ENTRY)&_ZN6S571C33v81Ev,
  (VTBL_ENTRY)&_ZN6S571C33v82Ev,
  (VTBL_ENTRY)&_ZN6S571C33v83Ev,
  (VTBL_ENTRY)&_ZN6S571C33v84Ev,
  (VTBL_ENTRY)&_ZN6S571C33v85Ev,
  (VTBL_ENTRY)&_ZN6S571C33v86Ev,
  (VTBL_ENTRY)&_ZN6S571C33v87Ev,
  (VTBL_ENTRY)&_ZN6S571C23v88Ev,
  (VTBL_ENTRY)&_ZN6S571C23v89Ev,
  (VTBL_ENTRY)&_ZN6S571C23v90Ev,
  (VTBL_ENTRY)&_ZN6S571C23v91Ev,
  (VTBL_ENTRY)&_ZN6S571C23v92Ev,
  (VTBL_ENTRY)&_ZN6S571C23v93Ev,
  (VTBL_ENTRY)&_ZN6S571C12v1Ev,
  (VTBL_ENTRY)&_ZN6S571C12v2Ev,
  (VTBL_ENTRY)&_ZN6S571C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S571C1[];
extern  VTBL_ENTRY _ZTV6S571C1[];
Class_Descriptor cd_S571C1 = {  "S571C1", // class name
  bases_S571C1, 4,
  &(vtc_S571C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(448,360), // object size
  NSPAIRA(_ZTI6S571C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S571C1),97, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S570C5  {
  int s570c5f0;
  __tsi64 s570c5f1;
  void *s570c5f2[4];
  int s570c5f3[2];
  void *s570c5f4;
  ::S273C7_nt s570c5f5;
  void *s570c5f6[2];
  virtual  ~S570C5(); // _ZN6S570C5D1Ev
  virtual void  v4(); // _ZN6S570C52v4Ev
  virtual void  v5(); // _ZN6S570C52v5Ev
  virtual void  v6(); // _ZN6S570C52v6Ev
  virtual void  v7(); // _ZN6S570C52v7Ev
  virtual void  v8(); // _ZN6S570C52v8Ev
  virtual void  v9(); // _ZN6S570C52v9Ev
  virtual void  v10(); // _ZN6S570C53v10Ev
  virtual void  v11(); // _ZN6S570C53v11Ev
  virtual void  v12(); // _ZN6S570C53v12Ev
  virtual void  v13(); // _ZN6S570C53v13Ev
  virtual void  v14(); // _ZN6S570C53v14Ev
  virtual void  v15(); // _ZN6S570C53v15Ev
  virtual void  v16(); // _ZN6S570C53v16Ev
  virtual void  v17(); // _ZN6S570C53v17Ev
  virtual void  v18(); // _ZN6S570C53v18Ev
  virtual void  v19(); // _ZN6S570C53v19Ev
  virtual void  v20(); // _ZN6S570C53v20Ev
  virtual void  v21(); // _ZN6S570C53v21Ev
  virtual void  v22(); // _ZN6S570C53v22Ev
  virtual void  v23(); // _ZN6S570C53v23Ev
  virtual void  v24(); // _ZN6S570C53v24Ev
  virtual void  v25(); // _ZN6S570C53v25Ev
  virtual void  v26(); // _ZN6S570C53v26Ev
  virtual void  v27(); // _ZN6S570C53v27Ev
  virtual void  v28(); // _ZN6S570C53v28Ev
  virtual void  v29(); // _ZN6S570C53v29Ev
  virtual void  v30(); // _ZN6S570C53v30Ev
  virtual void  v31(); // _ZN6S570C53v31Ev
  virtual void  v32(); // _ZN6S570C53v32Ev
  virtual void  v33(); // _ZN6S570C53v33Ev
  virtual void  v34(); // _ZN6S570C53v34Ev
  virtual void  v35(); // _ZN6S570C53v35Ev
  virtual void  v36(); // _ZN6S570C53v36Ev
  virtual void  v37(); // _ZN6S570C53v37Ev
  virtual void  v38(); // _ZN6S570C53v38Ev
  virtual void  v39(); // _ZN6S570C53v39Ev
  virtual void  v40(); // _ZN6S570C53v40Ev
  virtual void  v41(); // _ZN6S570C53v41Ev
  virtual void  v42(); // _ZN6S570C53v42Ev
  virtual void  v43(); // _ZN6S570C53v43Ev
  virtual void  v44(); // _ZN6S570C53v44Ev
  virtual void  v45(); // _ZN6S570C53v45Ev
  virtual void  v46(); // _ZN6S570C53v46Ev
  virtual void  v47(); // _ZN6S570C53v47Ev
  virtual void  v48(); // _ZN6S570C53v48Ev
  virtual void  v49(); // _ZN6S570C53v49Ev
  virtual void  v50(); // _ZN6S570C53v50Ev
  virtual void  v51(); // _ZN6S570C53v51Ev
  virtual void  v52(); // _ZN6S570C53v52Ev
  virtual void  v53(); // _ZN6S570C53v53Ev
  virtual void  v54(); // _ZN6S570C53v54Ev
  virtual void  v55(); // _ZN6S570C53v55Ev
  virtual void  v56(); // _ZN6S570C53v56Ev
  virtual void  v57(); // _ZN6S570C53v57Ev
  virtual void  v58(); // _ZN6S570C53v58Ev
  virtual void  v59(); // _ZN6S570C53v59Ev
  virtual void  v60(); // _ZN6S570C53v60Ev
  virtual void  v61(); // _ZN6S570C53v61Ev
  virtual void  v62(); // _ZN6S570C53v62Ev
  virtual void  v63(); // _ZN6S570C53v63Ev
  virtual void  v64(); // _ZN6S570C53v64Ev
  virtual void  v65(); // _ZN6S570C53v65Ev
  virtual void  v66(); // _ZN6S570C53v66Ev
  virtual void  v67(); // _ZN6S570C53v67Ev
  S570C5(); // tgen
};
//SIG(-1 S570C5) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S570C5 ::~S570C5(){ note_dtor("S570C5", this);}
void  S570C5 ::v4(){vfunc_called(this, "_ZN6S570C52v4Ev");}
void  S570C5 ::v5(){vfunc_called(this, "_ZN6S570C52v5Ev");}
void  S570C5 ::v6(){vfunc_called(this, "_ZN6S570C52v6Ev");}
void  S570C5 ::v7(){vfunc_called(this, "_ZN6S570C52v7Ev");}
void  S570C5 ::v8(){vfunc_called(this, "_ZN6S570C52v8Ev");}
void  S570C5 ::v9(){vfunc_called(this, "_ZN6S570C52v9Ev");}
void  S570C5 ::v10(){vfunc_called(this, "_ZN6S570C53v10Ev");}
void  S570C5 ::v11(){vfunc_called(this, "_ZN6S570C53v11Ev");}
void  S570C5 ::v12(){vfunc_called(this, "_ZN6S570C53v12Ev");}
void  S570C5 ::v13(){vfunc_called(this, "_ZN6S570C53v13Ev");}
void  S570C5 ::v14(){vfunc_called(this, "_ZN6S570C53v14Ev");}
void  S570C5 ::v15(){vfunc_called(this, "_ZN6S570C53v15Ev");}
void  S570C5 ::v16(){vfunc_called(this, "_ZN6S570C53v16Ev");}
void  S570C5 ::v17(){vfunc_called(this, "_ZN6S570C53v17Ev");}
void  S570C5 ::v18(){vfunc_called(this, "_ZN6S570C53v18Ev");}
void  S570C5 ::v19(){vfunc_called(this, "_ZN6S570C53v19Ev");}
void  S570C5 ::v20(){vfunc_called(this, "_ZN6S570C53v20Ev");}
void  S570C5 ::v21(){vfunc_called(this, "_ZN6S570C53v21Ev");}
void  S570C5 ::v22(){vfunc_called(this, "_ZN6S570C53v22Ev");}
void  S570C5 ::v23(){vfunc_called(this, "_ZN6S570C53v23Ev");}
void  S570C5 ::v24(){vfunc_called(this, "_ZN6S570C53v24Ev");}
void  S570C5 ::v25(){vfunc_called(this, "_ZN6S570C53v25Ev");}
void  S570C5 ::v26(){vfunc_called(this, "_ZN6S570C53v26Ev");}
void  S570C5 ::v27(){vfunc_called(this, "_ZN6S570C53v27Ev");}
void  S570C5 ::v28(){vfunc_called(this, "_ZN6S570C53v28Ev");}
void  S570C5 ::v29(){vfunc_called(this, "_ZN6S570C53v29Ev");}
void  S570C5 ::v30(){vfunc_called(this, "_ZN6S570C53v30Ev");}
void  S570C5 ::v31(){vfunc_called(this, "_ZN6S570C53v31Ev");}
void  S570C5 ::v32(){vfunc_called(this, "_ZN6S570C53v32Ev");}
void  S570C5 ::v33(){vfunc_called(this, "_ZN6S570C53v33Ev");}
void  S570C5 ::v34(){vfunc_called(this, "_ZN6S570C53v34Ev");}
void  S570C5 ::v35(){vfunc_called(this, "_ZN6S570C53v35Ev");}
void  S570C5 ::v36(){vfunc_called(this, "_ZN6S570C53v36Ev");}
void  S570C5 ::v37(){vfunc_called(this, "_ZN6S570C53v37Ev");}
void  S570C5 ::v38(){vfunc_called(this, "_ZN6S570C53v38Ev");}
void  S570C5 ::v39(){vfunc_called(this, "_ZN6S570C53v39Ev");}
void  S570C5 ::v40(){vfunc_called(this, "_ZN6S570C53v40Ev");}
void  S570C5 ::v41(){vfunc_called(this, "_ZN6S570C53v41Ev");}
void  S570C5 ::v42(){vfunc_called(this, "_ZN6S570C53v42Ev");}
void  S570C5 ::v43(){vfunc_called(this, "_ZN6S570C53v43Ev");}
void  S570C5 ::v44(){vfunc_called(this, "_ZN6S570C53v44Ev");}
void  S570C5 ::v45(){vfunc_called(this, "_ZN6S570C53v45Ev");}
void  S570C5 ::v46(){vfunc_called(this, "_ZN6S570C53v46Ev");}
void  S570C5 ::v47(){vfunc_called(this, "_ZN6S570C53v47Ev");}
void  S570C5 ::v48(){vfunc_called(this, "_ZN6S570C53v48Ev");}
void  S570C5 ::v49(){vfunc_called(this, "_ZN6S570C53v49Ev");}
void  S570C5 ::v50(){vfunc_called(this, "_ZN6S570C53v50Ev");}
void  S570C5 ::v51(){vfunc_called(this, "_ZN6S570C53v51Ev");}
void  S570C5 ::v52(){vfunc_called(this, "_ZN6S570C53v52Ev");}
void  S570C5 ::v53(){vfunc_called(this, "_ZN6S570C53v53Ev");}
void  S570C5 ::v54(){vfunc_called(this, "_ZN6S570C53v54Ev");}
void  S570C5 ::v55(){vfunc_called(this, "_ZN6S570C53v55Ev");}
void  S570C5 ::v56(){vfunc_called(this, "_ZN6S570C53v56Ev");}
void  S570C5 ::v57(){vfunc_called(this, "_ZN6S570C53v57Ev");}
void  S570C5 ::v58(){vfunc_called(this, "_ZN6S570C53v58Ev");}
void  S570C5 ::v59(){vfunc_called(this, "_ZN6S570C53v59Ev");}
void  S570C5 ::v60(){vfunc_called(this, "_ZN6S570C53v60Ev");}
void  S570C5 ::v61(){vfunc_called(this, "_ZN6S570C53v61Ev");}
void  S570C5 ::v62(){vfunc_called(this, "_ZN6S570C53v62Ev");}
void  S570C5 ::v63(){vfunc_called(this, "_ZN6S570C53v63Ev");}
void  S570C5 ::v64(){vfunc_called(this, "_ZN6S570C53v64Ev");}
void  S570C5 ::v65(){vfunc_called(this, "_ZN6S570C53v65Ev");}
void  S570C5 ::v66(){vfunc_called(this, "_ZN6S570C53v66Ev");}
void  S570C5 ::v67(){vfunc_called(this, "_ZN6S570C53v67Ev");}
S570C5 ::S570C5(){ note_ctor("S570C5", this);} // tgen

static void Test_S570C5()
{
  extern Class_Descriptor cd_S570C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S570C5, buf);
    S570C5 *dp, &lv = *(dp=new (buf) S570C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S570C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S570C5)");
    check_field_offset(lv, s570c5f0, ABISELECT(8,4), "S570C5.s570c5f0");
    check_field_offset(lv, s570c5f1, ABISELECT(16,8), "S570C5.s570c5f1");
    check_field_offset(lv, s570c5f2, ABISELECT(24,16), "S570C5.s570c5f2");
    check_field_offset(lv, s570c5f3, ABISELECT(56,32), "S570C5.s570c5f3");
    check_field_offset(lv, s570c5f4, ABISELECT(64,40), "S570C5.s570c5f4");
    check_field_offset(lv, s570c5f5, ABISELECT(72,44), "S570C5.s570c5f5");
    check_field_offset(lv, s570c5f6, ABISELECT(80,52), "S570C5.s570c5f6");
    test_class_info(&lv, &cd_S570C5);
    dp->~S570C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS570C5(Test_S570C5, "S570C5", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN6S570C5C1Ev();
extern void _ZN6S570C5D1Ev();
Name_Map name_map_S570C5[] = {
  NSPAIR(_ZN6S570C5C1Ev),
  NSPAIR(_ZN6S570C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S570C5[];
extern void _ZN6S570C5D1Ev();
extern void _ZN6S570C5D0Ev();
extern void _ZN6S570C52v4Ev();
extern void _ZN6S570C52v5Ev();
extern void _ZN6S570C52v6Ev();
extern void _ZN6S570C52v7Ev();
extern void _ZN6S570C52v8Ev();
extern void _ZN6S570C52v9Ev();
extern void _ZN6S570C53v10Ev();
extern void _ZN6S570C53v11Ev();
extern void _ZN6S570C53v12Ev();
extern void _ZN6S570C53v13Ev();
extern void _ZN6S570C53v14Ev();
extern void _ZN6S570C53v15Ev();
extern void _ZN6S570C53v16Ev();
extern void _ZN6S570C53v17Ev();
extern void _ZN6S570C53v18Ev();
extern void _ZN6S570C53v19Ev();
extern void _ZN6S570C53v20Ev();
extern void _ZN6S570C53v21Ev();
extern void _ZN6S570C53v22Ev();
extern void _ZN6S570C53v23Ev();
extern void _ZN6S570C53v24Ev();
extern void _ZN6S570C53v25Ev();
extern void _ZN6S570C53v26Ev();
extern void _ZN6S570C53v27Ev();
extern void _ZN6S570C53v28Ev();
extern void _ZN6S570C53v29Ev();
extern void _ZN6S570C53v30Ev();
extern void _ZN6S570C53v31Ev();
extern void _ZN6S570C53v32Ev();
extern void _ZN6S570C53v33Ev();
extern void _ZN6S570C53v34Ev();
extern void _ZN6S570C53v35Ev();
extern void _ZN6S570C53v36Ev();
extern void _ZN6S570C53v37Ev();
extern void _ZN6S570C53v38Ev();
extern void _ZN6S570C53v39Ev();
extern void _ZN6S570C53v40Ev();
extern void _ZN6S570C53v41Ev();
extern void _ZN6S570C53v42Ev();
extern void _ZN6S570C53v43Ev();
extern void _ZN6S570C53v44Ev();
extern void _ZN6S570C53v45Ev();
extern void _ZN6S570C53v46Ev();
extern void _ZN6S570C53v47Ev();
extern void _ZN6S570C53v48Ev();
extern void _ZN6S570C53v49Ev();
extern void _ZN6S570C53v50Ev();
extern void _ZN6S570C53v51Ev();
extern void _ZN6S570C53v52Ev();
extern void _ZN6S570C53v53Ev();
extern void _ZN6S570C53v54Ev();
extern void _ZN6S570C53v55Ev();
extern void _ZN6S570C53v56Ev();
extern void _ZN6S570C53v57Ev();
extern void _ZN6S570C53v58Ev();
extern void _ZN6S570C53v59Ev();
extern void _ZN6S570C53v60Ev();
extern void _ZN6S570C53v61Ev();
extern void _ZN6S570C53v62Ev();
extern void _ZN6S570C53v63Ev();
extern void _ZN6S570C53v64Ev();
extern void _ZN6S570C53v65Ev();
extern void _ZN6S570C53v66Ev();
extern void _ZN6S570C53v67Ev();
static  VTBL_ENTRY vtc_S570C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S570C5[0]),
  (VTBL_ENTRY)&_ZN6S570C5D1Ev,
  (VTBL_ENTRY)&_ZN6S570C5D0Ev,
  (VTBL_ENTRY)&_ZN6S570C52v4Ev,
  (VTBL_ENTRY)&_ZN6S570C52v5Ev,
  (VTBL_ENTRY)&_ZN6S570C52v6Ev,
  (VTBL_ENTRY)&_ZN6S570C52v7Ev,
  (VTBL_ENTRY)&_ZN6S570C52v8Ev,
  (VTBL_ENTRY)&_ZN6S570C52v9Ev,
  (VTBL_ENTRY)&_ZN6S570C53v10Ev,
  (VTBL_ENTRY)&_ZN6S570C53v11Ev,
  (VTBL_ENTRY)&_ZN6S570C53v12Ev,
  (VTBL_ENTRY)&_ZN6S570C53v13Ev,
  (VTBL_ENTRY)&_ZN6S570C53v14Ev,
  (VTBL_ENTRY)&_ZN6S570C53v15Ev,
  (VTBL_ENTRY)&_ZN6S570C53v16Ev,
  (VTBL_ENTRY)&_ZN6S570C53v17Ev,
  (VTBL_ENTRY)&_ZN6S570C53v18Ev,
  (VTBL_ENTRY)&_ZN6S570C53v19Ev,
  (VTBL_ENTRY)&_ZN6S570C53v20Ev,
  (VTBL_ENTRY)&_ZN6S570C53v21Ev,
  (VTBL_ENTRY)&_ZN6S570C53v22Ev,
  (VTBL_ENTRY)&_ZN6S570C53v23Ev,
  (VTBL_ENTRY)&_ZN6S570C53v24Ev,
  (VTBL_ENTRY)&_ZN6S570C53v25Ev,
  (VTBL_ENTRY)&_ZN6S570C53v26Ev,
  (VTBL_ENTRY)&_ZN6S570C53v27Ev,
  (VTBL_ENTRY)&_ZN6S570C53v28Ev,
  (VTBL_ENTRY)&_ZN6S570C53v29Ev,
  (VTBL_ENTRY)&_ZN6S570C53v30Ev,
  (VTBL_ENTRY)&_ZN6S570C53v31Ev,
  (VTBL_ENTRY)&_ZN6S570C53v32Ev,
  (VTBL_ENTRY)&_ZN6S570C53v33Ev,
  (VTBL_ENTRY)&_ZN6S570C53v34Ev,
  (VTBL_ENTRY)&_ZN6S570C53v35Ev,
  (VTBL_ENTRY)&_ZN6S570C53v36Ev,
  (VTBL_ENTRY)&_ZN6S570C53v37Ev,
  (VTBL_ENTRY)&_ZN6S570C53v38Ev,
  (VTBL_ENTRY)&_ZN6S570C53v39Ev,
  (VTBL_ENTRY)&_ZN6S570C53v40Ev,
  (VTBL_ENTRY)&_ZN6S570C53v41Ev,
  (VTBL_ENTRY)&_ZN6S570C53v42Ev,
  (VTBL_ENTRY)&_ZN6S570C53v43Ev,
  (VTBL_ENTRY)&_ZN6S570C53v44Ev,
  (VTBL_ENTRY)&_ZN6S570C53v45Ev,
  (VTBL_ENTRY)&_ZN6S570C53v46Ev,
  (VTBL_ENTRY)&_ZN6S570C53v47Ev,
  (VTBL_ENTRY)&_ZN6S570C53v48Ev,
  (VTBL_ENTRY)&_ZN6S570C53v49Ev,
  (VTBL_ENTRY)&_ZN6S570C53v50Ev,
  (VTBL_ENTRY)&_ZN6S570C53v51Ev,
  (VTBL_ENTRY)&_ZN6S570C53v52Ev,
  (VTBL_ENTRY)&_ZN6S570C53v53Ev,
  (VTBL_ENTRY)&_ZN6S570C53v54Ev,
  (VTBL_ENTRY)&_ZN6S570C53v55Ev,
  (VTBL_ENTRY)&_ZN6S570C53v56Ev,
  (VTBL_ENTRY)&_ZN6S570C53v57Ev,
  (VTBL_ENTRY)&_ZN6S570C53v58Ev,
  (VTBL_ENTRY)&_ZN6S570C53v59Ev,
  (VTBL_ENTRY)&_ZN6S570C53v60Ev,
  (VTBL_ENTRY)&_ZN6S570C53v61Ev,
  (VTBL_ENTRY)&_ZN6S570C53v62Ev,
  (VTBL_ENTRY)&_ZN6S570C53v63Ev,
  (VTBL_ENTRY)&_ZN6S570C53v64Ev,
  (VTBL_ENTRY)&_ZN6S570C53v65Ev,
  (VTBL_ENTRY)&_ZN6S570C53v66Ev,
  (VTBL_ENTRY)&_ZN6S570C53v67Ev,
};
extern VTBL_ENTRY _ZTI6S570C5[];
extern  VTBL_ENTRY _ZTV6S570C5[];
Class_Descriptor cd_S570C5 = {  "S570C5", // class name
  0,0,//no base classes
  &(vtc_S570C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI6S570C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S570C5),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S570C4  : S570C5 {
  void *s570c4f0;
  ::S273C7_nt s570c4f1;
  int s570c4f2[5];
  unsigned int s570c4f3:1;
  unsigned int s570c4f4:1;
  unsigned int s570c4f5:1;
  unsigned int s570c4f6:1;
  unsigned int s570c4f7:1;
  ::S273C21 s570c4f8;
  ::S273C17 s570c4f9;
  unsigned int s570c4f10:1;
  int s570c4f11[2];
  void *s570c4f12;
  int s570c4f13[3];
  virtual  ~S570C4(); // _ZN6S570C4D1Ev
  virtual void  v68(); // _ZN6S570C43v68Ev
  virtual void  v69(); // _ZN6S570C43v69Ev
  virtual void  v70(); // _ZN6S570C43v70Ev
  virtual void  v71(); // _ZN6S570C43v71Ev
  virtual void  v72(); // _ZN6S570C43v72Ev
  virtual void  v73(); // _ZN6S570C43v73Ev
  virtual void  v74(); // _ZN6S570C43v74Ev
  virtual void  v75(); // _ZN6S570C43v75Ev
  virtual void  v76(); // _ZN6S570C43v76Ev
  virtual void  v77(); // _ZN6S570C43v77Ev
  virtual void  v78(); // _ZN6S570C43v78Ev
  virtual void  v79(); // _ZN6S570C43v79Ev
  virtual void  v80(); // _ZN6S570C43v80Ev
  S570C4(); // tgen
};
//SIG(-1 S570C4) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S570C4 ::~S570C4(){ note_dtor("S570C4", this);}
void  S570C4 ::v68(){vfunc_called(this, "_ZN6S570C43v68Ev");}
void  S570C4 ::v69(){vfunc_called(this, "_ZN6S570C43v69Ev");}
void  S570C4 ::v70(){vfunc_called(this, "_ZN6S570C43v70Ev");}
void  S570C4 ::v71(){vfunc_called(this, "_ZN6S570C43v71Ev");}
void  S570C4 ::v72(){vfunc_called(this, "_ZN6S570C43v72Ev");}
void  S570C4 ::v73(){vfunc_called(this, "_ZN6S570C43v73Ev");}
void  S570C4 ::v74(){vfunc_called(this, "_ZN6S570C43v74Ev");}
void  S570C4 ::v75(){vfunc_called(this, "_ZN6S570C43v75Ev");}
void  S570C4 ::v76(){vfunc_called(this, "_ZN6S570C43v76Ev");}
void  S570C4 ::v77(){vfunc_called(this, "_ZN6S570C43v77Ev");}
void  S570C4 ::v78(){vfunc_called(this, "_ZN6S570C43v78Ev");}
void  S570C4 ::v79(){vfunc_called(this, "_ZN6S570C43v79Ev");}
void  S570C4 ::v80(){vfunc_called(this, "_ZN6S570C43v80Ev");}
S570C4 ::S570C4(){ note_ctor("S570C4", this);} // tgen

static void Test_S570C4()
{
  extern Class_Descriptor cd_S570C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S570C4, buf);
    S570C4 *dp, &lv = *(dp=new (buf) S570C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S570C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S570C4)");
    check_base_class_offset(lv, (S570C5*), 0, "S570C4");
    check_field_offset(lv, s570c4f0, ABISELECT(96,60), "S570C4.s570c4f0");
    check_field_offset(lv, s570c4f1, ABISELECT(104,64), "S570C4.s570c4f1");
    check_field_offset(lv, s570c4f2, ABISELECT(112,72), "S570C4.s570c4f2");
    set_bf_and_test(lv, s570c4f3, ABISELECT(132,92), 0, 1, 1, "S570C4");
    set_bf_and_test(lv, s570c4f4, ABISELECT(132,92), 1, 1, 1, "S570C4");
    set_bf_and_test(lv, s570c4f5, ABISELECT(132,92), 2, 1, 1, "S570C4");
    set_bf_and_test(lv, s570c4f6, ABISELECT(132,92), 3, 1, 1, "S570C4");
    set_bf_and_test(lv, s570c4f7, ABISELECT(132,92), 4, 1, 1, "S570C4");
    check_field_offset(lv, s570c4f8, ABISELECT(136,96), "S570C4.s570c4f8");
    check_field_offset(lv, s570c4f9, ABISELECT(152,108), "S570C4.s570c4f9");
    set_bf_and_test(lv, s570c4f10, ABISELECT(168,120), 0, 1, 1, "S570C4");
    check_field_offset(lv, s570c4f11, ABISELECT(172,124), "S570C4.s570c4f11");
    check_field_offset(lv, s570c4f12, ABISELECT(184,132), "S570C4.s570c4f12");
    check_field_offset(lv, s570c4f13, ABISELECT(192,136), "S570C4.s570c4f13");
    test_class_info(&lv, &cd_S570C4);
    dp->~S570C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS570C4(Test_S570C4, "S570C4", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN6S570C4C1Ev();
extern void _ZN6S570C4D1Ev();
Name_Map name_map_S570C4[] = {
  NSPAIR(_ZN6S570C4C1Ev),
  NSPAIR(_ZN6S570C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S570C5;
extern VTBL_ENTRY _ZTI6S570C5[];
extern  VTBL_ENTRY _ZTV6S570C5[];
static Base_Class bases_S570C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S570C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S570C4[];
extern void _ZN6S570C4D1Ev();
extern void _ZN6S570C4D0Ev();
extern void _ZN6S570C52v4Ev();
extern void _ZN6S570C52v5Ev();
extern void _ZN6S570C52v6Ev();
extern void _ZN6S570C52v7Ev();
extern void _ZN6S570C52v8Ev();
extern void _ZN6S570C52v9Ev();
extern void _ZN6S570C53v10Ev();
extern void _ZN6S570C53v11Ev();
extern void _ZN6S570C53v12Ev();
extern void _ZN6S570C53v13Ev();
extern void _ZN6S570C53v14Ev();
extern void _ZN6S570C53v15Ev();
extern void _ZN6S570C53v16Ev();
extern void _ZN6S570C53v17Ev();
extern void _ZN6S570C53v18Ev();
extern void _ZN6S570C53v19Ev();
extern void _ZN6S570C53v20Ev();
extern void _ZN6S570C53v21Ev();
extern void _ZN6S570C53v22Ev();
extern void _ZN6S570C53v23Ev();
extern void _ZN6S570C53v24Ev();
extern void _ZN6S570C53v25Ev();
extern void _ZN6S570C53v26Ev();
extern void _ZN6S570C53v27Ev();
extern void _ZN6S570C53v28Ev();
extern void _ZN6S570C53v29Ev();
extern void _ZN6S570C53v30Ev();
extern void _ZN6S570C53v31Ev();
extern void _ZN6S570C53v32Ev();
extern void _ZN6S570C53v33Ev();
extern void _ZN6S570C53v34Ev();
extern void _ZN6S570C53v35Ev();
extern void _ZN6S570C53v36Ev();
extern void _ZN6S570C53v37Ev();
extern void _ZN6S570C53v38Ev();
extern void _ZN6S570C53v39Ev();
extern void _ZN6S570C53v40Ev();
extern void _ZN6S570C53v41Ev();
extern void _ZN6S570C53v42Ev();
extern void _ZN6S570C53v43Ev();
extern void _ZN6S570C53v44Ev();
extern void _ZN6S570C53v45Ev();
extern void _ZN6S570C53v46Ev();
extern void _ZN6S570C53v47Ev();
extern void _ZN6S570C53v48Ev();
extern void _ZN6S570C53v49Ev();
extern void _ZN6S570C53v50Ev();
extern void _ZN6S570C53v51Ev();
extern void _ZN6S570C53v52Ev();
extern void _ZN6S570C53v53Ev();
extern void _ZN6S570C53v54Ev();
extern void _ZN6S570C53v55Ev();
extern void _ZN6S570C53v56Ev();
extern void _ZN6S570C53v57Ev();
extern void _ZN6S570C53v58Ev();
extern void _ZN6S570C53v59Ev();
extern void _ZN6S570C53v60Ev();
extern void _ZN6S570C53v61Ev();
extern void _ZN6S570C53v62Ev();
extern void _ZN6S570C53v63Ev();
extern void _ZN6S570C53v64Ev();
extern void _ZN6S570C53v65Ev();
extern void _ZN6S570C53v66Ev();
extern void _ZN6S570C53v67Ev();
extern void _ZN6S570C43v68Ev();
extern void _ZN6S570C43v69Ev();
extern void _ZN6S570C43v70Ev();
extern void _ZN6S570C43v71Ev();
extern void _ZN6S570C43v72Ev();
extern void _ZN6S570C43v73Ev();
extern void _ZN6S570C43v74Ev();
extern void _ZN6S570C43v75Ev();
extern void _ZN6S570C43v76Ev();
extern void _ZN6S570C43v77Ev();
extern void _ZN6S570C43v78Ev();
extern void _ZN6S570C43v79Ev();
extern void _ZN6S570C43v80Ev();
static  VTBL_ENTRY vtc_S570C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S570C4[0]),
  (VTBL_ENTRY)&_ZN6S570C4D1Ev,
  (VTBL_ENTRY)&_ZN6S570C4D0Ev,
  (VTBL_ENTRY)&_ZN6S570C52v4Ev,
  (VTBL_ENTRY)&_ZN6S570C52v5Ev,
  (VTBL_ENTRY)&_ZN6S570C52v6Ev,
  (VTBL_ENTRY)&_ZN6S570C52v7Ev,
  (VTBL_ENTRY)&_ZN6S570C52v8Ev,
  (VTBL_ENTRY)&_ZN6S570C52v9Ev,
  (VTBL_ENTRY)&_ZN6S570C53v10Ev,
  (VTBL_ENTRY)&_ZN6S570C53v11Ev,
  (VTBL_ENTRY)&_ZN6S570C53v12Ev,
  (VTBL_ENTRY)&_ZN6S570C53v13Ev,
  (VTBL_ENTRY)&_ZN6S570C53v14Ev,
  (VTBL_ENTRY)&_ZN6S570C53v15Ev,
  (VTBL_ENTRY)&_ZN6S570C53v16Ev,
  (VTBL_ENTRY)&_ZN6S570C53v17Ev,
  (VTBL_ENTRY)&_ZN6S570C53v18Ev,
  (VTBL_ENTRY)&_ZN6S570C53v19Ev,
  (VTBL_ENTRY)&_ZN6S570C53v20Ev,
  (VTBL_ENTRY)&_ZN6S570C53v21Ev,
  (VTBL_ENTRY)&_ZN6S570C53v22Ev,
  (VTBL_ENTRY)&_ZN6S570C53v23Ev,
  (VTBL_ENTRY)&_ZN6S570C53v24Ev,
  (VTBL_ENTRY)&_ZN6S570C53v25Ev,
  (VTBL_ENTRY)&_ZN6S570C53v26Ev,
  (VTBL_ENTRY)&_ZN6S570C53v27Ev,
  (VTBL_ENTRY)&_ZN6S570C53v28Ev,
  (VTBL_ENTRY)&_ZN6S570C53v29Ev,
  (VTBL_ENTRY)&_ZN6S570C53v30Ev,
  (VTBL_ENTRY)&_ZN6S570C53v31Ev,
  (VTBL_ENTRY)&_ZN6S570C53v32Ev,
  (VTBL_ENTRY)&_ZN6S570C53v33Ev,
  (VTBL_ENTRY)&_ZN6S570C53v34Ev,
  (VTBL_ENTRY)&_ZN6S570C53v35Ev,
  (VTBL_ENTRY)&_ZN6S570C53v36Ev,
  (VTBL_ENTRY)&_ZN6S570C53v37Ev,
  (VTBL_ENTRY)&_ZN6S570C53v38Ev,
  (VTBL_ENTRY)&_ZN6S570C53v39Ev,
  (VTBL_ENTRY)&_ZN6S570C53v40Ev,
  (VTBL_ENTRY)&_ZN6S570C53v41Ev,
  (VTBL_ENTRY)&_ZN6S570C53v42Ev,
  (VTBL_ENTRY)&_ZN6S570C53v43Ev,
  (VTBL_ENTRY)&_ZN6S570C53v44Ev,
  (VTBL_ENTRY)&_ZN6S570C53v45Ev,
  (VTBL_ENTRY)&_ZN6S570C53v46Ev,
  (VTBL_ENTRY)&_ZN6S570C53v47Ev,
  (VTBL_ENTRY)&_ZN6S570C53v48Ev,
  (VTBL_ENTRY)&_ZN6S570C53v49Ev,
  (VTBL_ENTRY)&_ZN6S570C53v50Ev,
  (VTBL_ENTRY)&_ZN6S570C53v51Ev,
  (VTBL_ENTRY)&_ZN6S570C53v52Ev,
  (VTBL_ENTRY)&_ZN6S570C53v53Ev,
  (VTBL_ENTRY)&_ZN6S570C53v54Ev,
  (VTBL_ENTRY)&_ZN6S570C53v55Ev,
  (VTBL_ENTRY)&_ZN6S570C53v56Ev,
  (VTBL_ENTRY)&_ZN6S570C53v57Ev,
  (VTBL_ENTRY)&_ZN6S570C53v58Ev,
  (VTBL_ENTRY)&_ZN6S570C53v59Ev,
  (VTBL_ENTRY)&_ZN6S570C53v60Ev,
  (VTBL_ENTRY)&_ZN6S570C53v61Ev,
  (VTBL_ENTRY)&_ZN6S570C53v62Ev,
  (VTBL_ENTRY)&_ZN6S570C53v63Ev,
  (VTBL_ENTRY)&_ZN6S570C53v64Ev,
  (VTBL_ENTRY)&_ZN6S570C53v65Ev,
  (VTBL_ENTRY)&_ZN6S570C53v66Ev,
  (VTBL_ENTRY)&_ZN6S570C53v67Ev,
  (VTBL_ENTRY)&_ZN6S570C43v68Ev,
  (VTBL_ENTRY)&_ZN6S570C43v69Ev,
  (VTBL_ENTRY)&_ZN6S570C43v70Ev,
  (VTBL_ENTRY)&_ZN6S570C43v71Ev,
  (VTBL_ENTRY)&_ZN6S570C43v72Ev,
  (VTBL_ENTRY)&_ZN6S570C43v73Ev,
  (VTBL_ENTRY)&_ZN6S570C43v74Ev,
  (VTBL_ENTRY)&_ZN6S570C43v75Ev,
  (VTBL_ENTRY)&_ZN6S570C43v76Ev,
  (VTBL_ENTRY)&_ZN6S570C43v77Ev,
  (VTBL_ENTRY)&_ZN6S570C43v78Ev,
  (VTBL_ENTRY)&_ZN6S570C43v79Ev,
  (VTBL_ENTRY)&_ZN6S570C43v80Ev,
};
extern VTBL_ENTRY _ZTI6S570C4[];
extern  VTBL_ENTRY _ZTV6S570C4[];
Class_Descriptor cd_S570C4 = {  "S570C4", // class name
  bases_S570C4, 1,
  &(vtc_S570C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI6S570C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S570C4),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S570C3  : S570C4 {
  unsigned int s570c3f0:1;
  unsigned int s570c3f1:1;
  unsigned int s570c3f2:1;
  unsigned int s570c3f3:1;
  ::S664C12_nt s570c3f4;
  char s570c3f5[2];
  ::S273C7_nt s570c3f6;
  ::S632C13 s570c3f7;
  ::S273C7_nt s570c3f8;
  virtual  ~S570C3(); // _ZN6S570C3D1Ev
  virtual void  v81(); // _ZN6S570C33v81Ev
  virtual void  v82(); // _ZN6S570C33v82Ev
  virtual void  v83(); // _ZN6S570C33v83Ev
  virtual void  v84(); // _ZN6S570C33v84Ev
  virtual void  v85(); // _ZN6S570C33v85Ev
  virtual void  v86(); // _ZN6S570C33v86Ev
  virtual void  v87(); // _ZN6S570C33v87Ev
  S570C3(); // tgen
};
//SIG(-1 S570C3) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S570C3 ::~S570C3(){ note_dtor("S570C3", this);}
void  S570C3 ::v81(){vfunc_called(this, "_ZN6S570C33v81Ev");}
void  S570C3 ::v82(){vfunc_called(this, "_ZN6S570C33v82Ev");}
void  S570C3 ::v83(){vfunc_called(this, "_ZN6S570C33v83Ev");}
void  S570C3 ::v84(){vfunc_called(this, "_ZN6S570C33v84Ev");}
void  S570C3 ::v85(){vfunc_called(this, "_ZN6S570C33v85Ev");}
void  S570C3 ::v86(){vfunc_called(this, "_ZN6S570C33v86Ev");}
void  S570C3 ::v87(){vfunc_called(this, "_ZN6S570C33v87Ev");}
S570C3 ::S570C3(){ note_ctor("S570C3", this);} // tgen

static void Test_S570C3()
{
  extern Class_Descriptor cd_S570C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S570C3, buf);
    S570C3 *dp, &lv = *(dp=new (buf) S570C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S570C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S570C3)");
    check_base_class_offset(lv, (S570C5*)(S570C4*), 0, "S570C3");
    check_base_class_offset(lv, (S570C4*), 0, "S570C3");
    set_bf_and_test(lv, s570c3f0, ABISELECT(204,148), 0, 1, 1, "S570C3");
    set_bf_and_test(lv, s570c3f1, ABISELECT(204,148), 1, 1, 1, "S570C3");
    set_bf_and_test(lv, s570c3f2, ABISELECT(204,148), 2, 1, 1, "S570C3");
    set_bf_and_test(lv, s570c3f3, ABISELECT(204,148), 3, 1, 1, "S570C3");
    check_field_offset(lv, s570c3f4, ABISELECT(208,152), "S570C3.s570c3f4");
    check_field_offset(lv, s570c3f5, ABISELECT(220,164), "S570C3.s570c3f5");
    check_field_offset(lv, s570c3f6, ABISELECT(224,168), "S570C3.s570c3f6");
    check_field_offset(lv, s570c3f7, ABISELECT(232,176), "S570C3.s570c3f7");
    check_field_offset(lv, s570c3f8, ABISELECT(244,188), "S570C3.s570c3f8");
    test_class_info(&lv, &cd_S570C3);
    dp->~S570C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS570C3(Test_S570C3, "S570C3", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN6S570C3C1Ev();
extern void _ZN6S570C3D1Ev();
Name_Map name_map_S570C3[] = {
  NSPAIR(_ZN6S570C3C1Ev),
  NSPAIR(_ZN6S570C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S570C5;
extern VTBL_ENTRY _ZTI6S570C5[];
extern  VTBL_ENTRY _ZTV6S570C5[];
extern Class_Descriptor cd_S570C4;
extern VTBL_ENTRY _ZTI6S570C4[];
extern  VTBL_ENTRY _ZTV6S570C4[];
static Base_Class bases_S570C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S570C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S570C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S570C3[];
extern void _ZN6S570C3D1Ev();
extern void _ZN6S570C3D0Ev();
extern void _ZN6S570C52v4Ev();
extern void _ZN6S570C52v5Ev();
extern void _ZN6S570C52v6Ev();
extern void _ZN6S570C52v7Ev();
extern void _ZN6S570C52v8Ev();
extern void _ZN6S570C52v9Ev();
extern void _ZN6S570C53v10Ev();
extern void _ZN6S570C53v11Ev();
extern void _ZN6S570C53v12Ev();
extern void _ZN6S570C53v13Ev();
extern void _ZN6S570C53v14Ev();
extern void _ZN6S570C53v15Ev();
extern void _ZN6S570C53v16Ev();
extern void _ZN6S570C53v17Ev();
extern void _ZN6S570C53v18Ev();
extern void _ZN6S570C53v19Ev();
extern void _ZN6S570C53v20Ev();
extern void _ZN6S570C53v21Ev();
extern void _ZN6S570C53v22Ev();
extern void _ZN6S570C53v23Ev();
extern void _ZN6S570C53v24Ev();
extern void _ZN6S570C53v25Ev();
extern void _ZN6S570C53v26Ev();
extern void _ZN6S570C53v27Ev();
extern void _ZN6S570C53v28Ev();
extern void _ZN6S570C53v29Ev();
extern void _ZN6S570C53v30Ev();
extern void _ZN6S570C53v31Ev();
extern void _ZN6S570C53v32Ev();
extern void _ZN6S570C53v33Ev();
extern void _ZN6S570C53v34Ev();
extern void _ZN6S570C53v35Ev();
extern void _ZN6S570C53v36Ev();
extern void _ZN6S570C53v37Ev();
extern void _ZN6S570C53v38Ev();
extern void _ZN6S570C53v39Ev();
extern void _ZN6S570C53v40Ev();
extern void _ZN6S570C53v41Ev();
extern void _ZN6S570C53v42Ev();
extern void _ZN6S570C53v43Ev();
extern void _ZN6S570C53v44Ev();
extern void _ZN6S570C53v45Ev();
extern void _ZN6S570C53v46Ev();
extern void _ZN6S570C53v47Ev();
extern void _ZN6S570C53v48Ev();
extern void _ZN6S570C53v49Ev();
extern void _ZN6S570C53v50Ev();
extern void _ZN6S570C53v51Ev();
extern void _ZN6S570C53v52Ev();
extern void _ZN6S570C53v53Ev();
extern void _ZN6S570C53v54Ev();
extern void _ZN6S570C53v55Ev();
extern void _ZN6S570C53v56Ev();
extern void _ZN6S570C53v57Ev();
extern void _ZN6S570C53v58Ev();
extern void _ZN6S570C53v59Ev();
extern void _ZN6S570C53v60Ev();
extern void _ZN6S570C53v61Ev();
extern void _ZN6S570C53v62Ev();
extern void _ZN6S570C53v63Ev();
extern void _ZN6S570C53v64Ev();
extern void _ZN6S570C53v65Ev();
extern void _ZN6S570C53v66Ev();
extern void _ZN6S570C53v67Ev();
extern void _ZN6S570C43v68Ev();
extern void _ZN6S570C43v69Ev();
extern void _ZN6S570C43v70Ev();
extern void _ZN6S570C43v71Ev();
extern void _ZN6S570C43v72Ev();
extern void _ZN6S570C43v73Ev();
extern void _ZN6S570C43v74Ev();
extern void _ZN6S570C43v75Ev();
extern void _ZN6S570C43v76Ev();
extern void _ZN6S570C43v77Ev();
extern void _ZN6S570C43v78Ev();
extern void _ZN6S570C43v79Ev();
extern void _ZN6S570C43v80Ev();
extern void _ZN6S570C33v81Ev();
extern void _ZN6S570C33v82Ev();
extern void _ZN6S570C33v83Ev();
extern void _ZN6S570C33v84Ev();
extern void _ZN6S570C33v85Ev();
extern void _ZN6S570C33v86Ev();
extern void _ZN6S570C33v87Ev();
static  VTBL_ENTRY vtc_S570C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S570C3[0]),
  (VTBL_ENTRY)&_ZN6S570C3D1Ev,
  (VTBL_ENTRY)&_ZN6S570C3D0Ev,
  (VTBL_ENTRY)&_ZN6S570C52v4Ev,
  (VTBL_ENTRY)&_ZN6S570C52v5Ev,
  (VTBL_ENTRY)&_ZN6S570C52v6Ev,
  (VTBL_ENTRY)&_ZN6S570C52v7Ev,
  (VTBL_ENTRY)&_ZN6S570C52v8Ev,
  (VTBL_ENTRY)&_ZN6S570C52v9Ev,
  (VTBL_ENTRY)&_ZN6S570C53v10Ev,
  (VTBL_ENTRY)&_ZN6S570C53v11Ev,
  (VTBL_ENTRY)&_ZN6S570C53v12Ev,
  (VTBL_ENTRY)&_ZN6S570C53v13Ev,
  (VTBL_ENTRY)&_ZN6S570C53v14Ev,
  (VTBL_ENTRY)&_ZN6S570C53v15Ev,
  (VTBL_ENTRY)&_ZN6S570C53v16Ev,
  (VTBL_ENTRY)&_ZN6S570C53v17Ev,
  (VTBL_ENTRY)&_ZN6S570C53v18Ev,
  (VTBL_ENTRY)&_ZN6S570C53v19Ev,
  (VTBL_ENTRY)&_ZN6S570C53v20Ev,
  (VTBL_ENTRY)&_ZN6S570C53v21Ev,
  (VTBL_ENTRY)&_ZN6S570C53v22Ev,
  (VTBL_ENTRY)&_ZN6S570C53v23Ev,
  (VTBL_ENTRY)&_ZN6S570C53v24Ev,
  (VTBL_ENTRY)&_ZN6S570C53v25Ev,
  (VTBL_ENTRY)&_ZN6S570C53v26Ev,
  (VTBL_ENTRY)&_ZN6S570C53v27Ev,
  (VTBL_ENTRY)&_ZN6S570C53v28Ev,
  (VTBL_ENTRY)&_ZN6S570C53v29Ev,
  (VTBL_ENTRY)&_ZN6S570C53v30Ev,
  (VTBL_ENTRY)&_ZN6S570C53v31Ev,
  (VTBL_ENTRY)&_ZN6S570C53v32Ev,
  (VTBL_ENTRY)&_ZN6S570C53v33Ev,
  (VTBL_ENTRY)&_ZN6S570C53v34Ev,
  (VTBL_ENTRY)&_ZN6S570C53v35Ev,
  (VTBL_ENTRY)&_ZN6S570C53v36Ev,
  (VTBL_ENTRY)&_ZN6S570C53v37Ev,
  (VTBL_ENTRY)&_ZN6S570C53v38Ev,
  (VTBL_ENTRY)&_ZN6S570C53v39Ev,
  (VTBL_ENTRY)&_ZN6S570C53v40Ev,
  (VTBL_ENTRY)&_ZN6S570C53v41Ev,
  (VTBL_ENTRY)&_ZN6S570C53v42Ev,
  (VTBL_ENTRY)&_ZN6S570C53v43Ev,
  (VTBL_ENTRY)&_ZN6S570C53v44Ev,
  (VTBL_ENTRY)&_ZN6S570C53v45Ev,
  (VTBL_ENTRY)&_ZN6S570C53v46Ev,
  (VTBL_ENTRY)&_ZN6S570C53v47Ev,
  (VTBL_ENTRY)&_ZN6S570C53v48Ev,
  (VTBL_ENTRY)&_ZN6S570C53v49Ev,
  (VTBL_ENTRY)&_ZN6S570C53v50Ev,
  (VTBL_ENTRY)&_ZN6S570C53v51Ev,
  (VTBL_ENTRY)&_ZN6S570C53v52Ev,
  (VTBL_ENTRY)&_ZN6S570C53v53Ev,
  (VTBL_ENTRY)&_ZN6S570C53v54Ev,
  (VTBL_ENTRY)&_ZN6S570C53v55Ev,
  (VTBL_ENTRY)&_ZN6S570C53v56Ev,
  (VTBL_ENTRY)&_ZN6S570C53v57Ev,
  (VTBL_ENTRY)&_ZN6S570C53v58Ev,
  (VTBL_ENTRY)&_ZN6S570C53v59Ev,
  (VTBL_ENTRY)&_ZN6S570C53v60Ev,
  (VTBL_ENTRY)&_ZN6S570C53v61Ev,
  (VTBL_ENTRY)&_ZN6S570C53v62Ev,
  (VTBL_ENTRY)&_ZN6S570C53v63Ev,
  (VTBL_ENTRY)&_ZN6S570C53v64Ev,
  (VTBL_ENTRY)&_ZN6S570C53v65Ev,
  (VTBL_ENTRY)&_ZN6S570C53v66Ev,
  (VTBL_ENTRY)&_ZN6S570C53v67Ev,
  (VTBL_ENTRY)&_ZN6S570C43v68Ev,
  (VTBL_ENTRY)&_ZN6S570C43v69Ev,
  (VTBL_ENTRY)&_ZN6S570C43v70Ev,
  (VTBL_ENTRY)&_ZN6S570C43v71Ev,
  (VTBL_ENTRY)&_ZN6S570C43v72Ev,
  (VTBL_ENTRY)&_ZN6S570C43v73Ev,
  (VTBL_ENTRY)&_ZN6S570C43v74Ev,
  (VTBL_ENTRY)&_ZN6S570C43v75Ev,
  (VTBL_ENTRY)&_ZN6S570C43v76Ev,
  (VTBL_ENTRY)&_ZN6S570C43v77Ev,
  (VTBL_ENTRY)&_ZN6S570C43v78Ev,
  (VTBL_ENTRY)&_ZN6S570C43v79Ev,
  (VTBL_ENTRY)&_ZN6S570C43v80Ev,
  (VTBL_ENTRY)&_ZN6S570C33v81Ev,
  (VTBL_ENTRY)&_ZN6S570C33v82Ev,
  (VTBL_ENTRY)&_ZN6S570C33v83Ev,
  (VTBL_ENTRY)&_ZN6S570C33v84Ev,
  (VTBL_ENTRY)&_ZN6S570C33v85Ev,
  (VTBL_ENTRY)&_ZN6S570C33v86Ev,
  (VTBL_ENTRY)&_ZN6S570C33v87Ev,
};
extern VTBL_ENTRY _ZTI6S570C3[];
extern  VTBL_ENTRY _ZTV6S570C3[];
Class_Descriptor cd_S570C3 = {  "S570C3", // class name
  bases_S570C3, 2,
  &(vtc_S570C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI6S570C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S570C3),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S570C2  : S570C3 {
  unsigned int s570c2f0:1;
  unsigned int s570c2f1:1;
  unsigned int s570c2f2:1;
  unsigned int s570c2f3:1;
  unsigned int s570c2f4:1;
  unsigned int s570c2f5:1;
  unsigned int s570c2f6:1;
  unsigned int s570c2f7:1;
  unsigned int s570c2f8:1;
  ::S632C14_nt s570c2f9;
  ::S632C14_nt s570c2f10;
  ::S273C13 s570c2f11;
  int s570c2f12[2];
  ::S632C13 s570c2f13;
  int s570c2f14;
  ::S632C13 s570c2f15;
  ::S632C17_nt s570c2f16;
  virtual  ~S570C2(); // _ZN6S570C2D1Ev
  virtual void  v88(); // _ZN6S570C23v88Ev
  virtual void  v89(); // _ZN6S570C23v89Ev
  virtual void  v90(); // _ZN6S570C23v90Ev
  S570C2(); // tgen
};
//SIG(-1 S570C2) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC13{ Fi[3]} FC13 FC14{ BC15{ BC8}} Fi[2] FC12 Fi FC12 FC16{ m Fp FC5}}


 S570C2 ::~S570C2(){ note_dtor("S570C2", this);}
void  S570C2 ::v88(){vfunc_called(this, "_ZN6S570C23v88Ev");}
void  S570C2 ::v89(){vfunc_called(this, "_ZN6S570C23v89Ev");}
void  S570C2 ::v90(){vfunc_called(this, "_ZN6S570C23v90Ev");}
S570C2 ::S570C2(){ note_ctor("S570C2", this);} // tgen

static void Test_S570C2()
{
  extern Class_Descriptor cd_S570C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(45,72)];
    init_test(&cd_S570C2, buf);
    S570C2 *dp, &lv = *(dp=new (buf) S570C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(352,284), "sizeof(S570C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S570C2)");
    check_base_class_offset(lv, (S570C5*)(S570C4*)(S570C3*), 0, "S570C2");
    check_base_class_offset(lv, (S570C4*)(S570C3*), 0, "S570C2");
    check_base_class_offset(lv, (S570C3*), 0, "S570C2");
    set_bf_and_test(lv, s570c2f0, ABISELECT(252,196), 0, 1, 1, "S570C2");
    set_bf_and_test(lv, s570c2f1, ABISELECT(252,196), 1, 1, 1, "S570C2");
    set_bf_and_test(lv, s570c2f2, ABISELECT(252,196), 2, 1, 1, "S570C2");
    set_bf_and_test(lv, s570c2f3, ABISELECT(252,196), 3, 1, 1, "S570C2");
    set_bf_and_test(lv, s570c2f4, ABISELECT(252,196), 4, 1, 1, "S570C2");
    set_bf_and_test(lv, s570c2f5, ABISELECT(252,196), 5, 1, 1, "S570C2");
    set_bf_and_test(lv, s570c2f6, ABISELECT(252,196), 6, 1, 1, "S570C2");
    set_bf_and_test(lv, s570c2f7, ABISELECT(252,196), 7, 1, 1, "S570C2");
    set_bf_and_test(lv, s570c2f8, ABISELECT(253,197), 0, 1, 1, "S570C2");
    check_field_offset(lv, s570c2f9, ABISELECT(256,200), "S570C2.s570c2f9");
    check_field_offset(lv, s570c2f10, ABISELECT(268,212), "S570C2.s570c2f10");
    check_field_offset(lv, s570c2f11, ABISELECT(280,224), "S570C2.s570c2f11");
    check_field_offset(lv, s570c2f12, ABISELECT(296,236), "S570C2.s570c2f12");
    check_field_offset(lv, s570c2f13, ABISELECT(304,244), "S570C2.s570c2f13");
    check_field_offset(lv, s570c2f14, ABISELECT(316,256), "S570C2.s570c2f14");
    check_field_offset(lv, s570c2f15, ABISELECT(320,260), "S570C2.s570c2f15");
    check_field_offset(lv, s570c2f16, ABISELECT(336,272), "S570C2.s570c2f16");
    test_class_info(&lv, &cd_S570C2);
    dp->~S570C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS570C2(Test_S570C2, "S570C2", ABISELECT(352,284));

#else // __cplusplus

extern void _ZN6S570C2C1Ev();
extern void _ZN6S570C2D1Ev();
Name_Map name_map_S570C2[] = {
  NSPAIR(_ZN6S570C2C1Ev),
  NSPAIR(_ZN6S570C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S570C5;
extern VTBL_ENTRY _ZTI6S570C5[];
extern  VTBL_ENTRY _ZTV6S570C5[];
extern Class_Descriptor cd_S570C4;
extern VTBL_ENTRY _ZTI6S570C4[];
extern  VTBL_ENTRY _ZTV6S570C4[];
extern Class_Descriptor cd_S570C3;
extern VTBL_ENTRY _ZTI6S570C3[];
extern  VTBL_ENTRY _ZTV6S570C3[];
static Base_Class bases_S570C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S570C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S570C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S570C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S570C2[];
extern void _ZN6S570C2D1Ev();
extern void _ZN6S570C2D0Ev();
extern void _ZN6S570C52v4Ev();
extern void _ZN6S570C52v5Ev();
extern void _ZN6S570C52v6Ev();
extern void _ZN6S570C52v7Ev();
extern void _ZN6S570C52v8Ev();
extern void _ZN6S570C52v9Ev();
extern void _ZN6S570C53v10Ev();
extern void _ZN6S570C53v11Ev();
extern void _ZN6S570C53v12Ev();
extern void _ZN6S570C53v13Ev();
extern void _ZN6S570C53v14Ev();
extern void _ZN6S570C53v15Ev();
extern void _ZN6S570C53v16Ev();
extern void _ZN6S570C53v17Ev();
extern void _ZN6S570C53v18Ev();
extern void _ZN6S570C53v19Ev();
extern void _ZN6S570C53v20Ev();
extern void _ZN6S570C53v21Ev();
extern void _ZN6S570C53v22Ev();
extern void _ZN6S570C53v23Ev();
extern void _ZN6S570C53v24Ev();
extern void _ZN6S570C53v25Ev();
extern void _ZN6S570C53v26Ev();
extern void _ZN6S570C53v27Ev();
extern void _ZN6S570C53v28Ev();
extern void _ZN6S570C53v29Ev();
extern void _ZN6S570C53v30Ev();
extern void _ZN6S570C53v31Ev();
extern void _ZN6S570C53v32Ev();
extern void _ZN6S570C53v33Ev();
extern void _ZN6S570C53v34Ev();
extern void _ZN6S570C53v35Ev();
extern void _ZN6S570C53v36Ev();
extern void _ZN6S570C53v37Ev();
extern void _ZN6S570C53v38Ev();
extern void _ZN6S570C53v39Ev();
extern void _ZN6S570C53v40Ev();
extern void _ZN6S570C53v41Ev();
extern void _ZN6S570C53v42Ev();
extern void _ZN6S570C53v43Ev();
extern void _ZN6S570C53v44Ev();
extern void _ZN6S570C53v45Ev();
extern void _ZN6S570C53v46Ev();
extern void _ZN6S570C53v47Ev();
extern void _ZN6S570C53v48Ev();
extern void _ZN6S570C53v49Ev();
extern void _ZN6S570C53v50Ev();
extern void _ZN6S570C53v51Ev();
extern void _ZN6S570C53v52Ev();
extern void _ZN6S570C53v53Ev();
extern void _ZN6S570C53v54Ev();
extern void _ZN6S570C53v55Ev();
extern void _ZN6S570C53v56Ev();
extern void _ZN6S570C53v57Ev();
extern void _ZN6S570C53v58Ev();
extern void _ZN6S570C53v59Ev();
extern void _ZN6S570C53v60Ev();
extern void _ZN6S570C53v61Ev();
extern void _ZN6S570C53v62Ev();
extern void _ZN6S570C53v63Ev();
extern void _ZN6S570C53v64Ev();
extern void _ZN6S570C53v65Ev();
extern void _ZN6S570C53v66Ev();
extern void _ZN6S570C53v67Ev();
extern void _ZN6S570C43v68Ev();
extern void _ZN6S570C43v69Ev();
extern void _ZN6S570C43v70Ev();
extern void _ZN6S570C43v71Ev();
extern void _ZN6S570C43v72Ev();
extern void _ZN6S570C43v73Ev();
extern void _ZN6S570C43v74Ev();
extern void _ZN6S570C43v75Ev();
extern void _ZN6S570C43v76Ev();
extern void _ZN6S570C43v77Ev();
extern void _ZN6S570C43v78Ev();
extern void _ZN6S570C43v79Ev();
extern void _ZN6S570C43v80Ev();
extern void _ZN6S570C33v81Ev();
extern void _ZN6S570C33v82Ev();
extern void _ZN6S570C33v83Ev();
extern void _ZN6S570C33v84Ev();
extern void _ZN6S570C33v85Ev();
extern void _ZN6S570C33v86Ev();
extern void _ZN6S570C33v87Ev();
extern void _ZN6S570C23v88Ev();
extern void _ZN6S570C23v89Ev();
extern void _ZN6S570C23v90Ev();
static  VTBL_ENTRY vtc_S570C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S570C2[0]),
  (VTBL_ENTRY)&_ZN6S570C2D1Ev,
  (VTBL_ENTRY)&_ZN6S570C2D0Ev,
  (VTBL_ENTRY)&_ZN6S570C52v4Ev,
  (VTBL_ENTRY)&_ZN6S570C52v5Ev,
  (VTBL_ENTRY)&_ZN6S570C52v6Ev,
  (VTBL_ENTRY)&_ZN6S570C52v7Ev,
  (VTBL_ENTRY)&_ZN6S570C52v8Ev,
  (VTBL_ENTRY)&_ZN6S570C52v9Ev,
  (VTBL_ENTRY)&_ZN6S570C53v10Ev,
  (VTBL_ENTRY)&_ZN6S570C53v11Ev,
  (VTBL_ENTRY)&_ZN6S570C53v12Ev,
  (VTBL_ENTRY)&_ZN6S570C53v13Ev,
  (VTBL_ENTRY)&_ZN6S570C53v14Ev,
  (VTBL_ENTRY)&_ZN6S570C53v15Ev,
  (VTBL_ENTRY)&_ZN6S570C53v16Ev,
  (VTBL_ENTRY)&_ZN6S570C53v17Ev,
  (VTBL_ENTRY)&_ZN6S570C53v18Ev,
  (VTBL_ENTRY)&_ZN6S570C53v19Ev,
  (VTBL_ENTRY)&_ZN6S570C53v20Ev,
  (VTBL_ENTRY)&_ZN6S570C53v21Ev,
  (VTBL_ENTRY)&_ZN6S570C53v22Ev,
  (VTBL_ENTRY)&_ZN6S570C53v23Ev,
  (VTBL_ENTRY)&_ZN6S570C53v24Ev,
  (VTBL_ENTRY)&_ZN6S570C53v25Ev,
  (VTBL_ENTRY)&_ZN6S570C53v26Ev,
  (VTBL_ENTRY)&_ZN6S570C53v27Ev,
  (VTBL_ENTRY)&_ZN6S570C53v28Ev,
  (VTBL_ENTRY)&_ZN6S570C53v29Ev,
  (VTBL_ENTRY)&_ZN6S570C53v30Ev,
  (VTBL_ENTRY)&_ZN6S570C53v31Ev,
  (VTBL_ENTRY)&_ZN6S570C53v32Ev,
  (VTBL_ENTRY)&_ZN6S570C53v33Ev,
  (VTBL_ENTRY)&_ZN6S570C53v34Ev,
  (VTBL_ENTRY)&_ZN6S570C53v35Ev,
  (VTBL_ENTRY)&_ZN6S570C53v36Ev,
  (VTBL_ENTRY)&_ZN6S570C53v37Ev,
  (VTBL_ENTRY)&_ZN6S570C53v38Ev,
  (VTBL_ENTRY)&_ZN6S570C53v39Ev,
  (VTBL_ENTRY)&_ZN6S570C53v40Ev,
  (VTBL_ENTRY)&_ZN6S570C53v41Ev,
  (VTBL_ENTRY)&_ZN6S570C53v42Ev,
  (VTBL_ENTRY)&_ZN6S570C53v43Ev,
  (VTBL_ENTRY)&_ZN6S570C53v44Ev,
  (VTBL_ENTRY)&_ZN6S570C53v45Ev,
  (VTBL_ENTRY)&_ZN6S570C53v46Ev,
  (VTBL_ENTRY)&_ZN6S570C53v47Ev,
  (VTBL_ENTRY)&_ZN6S570C53v48Ev,
  (VTBL_ENTRY)&_ZN6S570C53v49Ev,
  (VTBL_ENTRY)&_ZN6S570C53v50Ev,
  (VTBL_ENTRY)&_ZN6S570C53v51Ev,
  (VTBL_ENTRY)&_ZN6S570C53v52Ev,
  (VTBL_ENTRY)&_ZN6S570C53v53Ev,
  (VTBL_ENTRY)&_ZN6S570C53v54Ev,
  (VTBL_ENTRY)&_ZN6S570C53v55Ev,
  (VTBL_ENTRY)&_ZN6S570C53v56Ev,
  (VTBL_ENTRY)&_ZN6S570C53v57Ev,
  (VTBL_ENTRY)&_ZN6S570C53v58Ev,
  (VTBL_ENTRY)&_ZN6S570C53v59Ev,
  (VTBL_ENTRY)&_ZN6S570C53v60Ev,
  (VTBL_ENTRY)&_ZN6S570C53v61Ev,
  (VTBL_ENTRY)&_ZN6S570C53v62Ev,
  (VTBL_ENTRY)&_ZN6S570C53v63Ev,
  (VTBL_ENTRY)&_ZN6S570C53v64Ev,
  (VTBL_ENTRY)&_ZN6S570C53v65Ev,
  (VTBL_ENTRY)&_ZN6S570C53v66Ev,
  (VTBL_ENTRY)&_ZN6S570C53v67Ev,
  (VTBL_ENTRY)&_ZN6S570C43v68Ev,
  (VTBL_ENTRY)&_ZN6S570C43v69Ev,
  (VTBL_ENTRY)&_ZN6S570C43v70Ev,
  (VTBL_ENTRY)&_ZN6S570C43v71Ev,
  (VTBL_ENTRY)&_ZN6S570C43v72Ev,
  (VTBL_ENTRY)&_ZN6S570C43v73Ev,
  (VTBL_ENTRY)&_ZN6S570C43v74Ev,
  (VTBL_ENTRY)&_ZN6S570C43v75Ev,
  (VTBL_ENTRY)&_ZN6S570C43v76Ev,
  (VTBL_ENTRY)&_ZN6S570C43v77Ev,
  (VTBL_ENTRY)&_ZN6S570C43v78Ev,
  (VTBL_ENTRY)&_ZN6S570C43v79Ev,
  (VTBL_ENTRY)&_ZN6S570C43v80Ev,
  (VTBL_ENTRY)&_ZN6S570C33v81Ev,
  (VTBL_ENTRY)&_ZN6S570C33v82Ev,
  (VTBL_ENTRY)&_ZN6S570C33v83Ev,
  (VTBL_ENTRY)&_ZN6S570C33v84Ev,
  (VTBL_ENTRY)&_ZN6S570C33v85Ev,
  (VTBL_ENTRY)&_ZN6S570C33v86Ev,
  (VTBL_ENTRY)&_ZN6S570C33v87Ev,
  (VTBL_ENTRY)&_ZN6S570C23v88Ev,
  (VTBL_ENTRY)&_ZN6S570C23v89Ev,
  (VTBL_ENTRY)&_ZN6S570C23v90Ev,
};
extern VTBL_ENTRY _ZTI6S570C2[];
extern  VTBL_ENTRY _ZTV6S570C2[];
Class_Descriptor cd_S570C2 = {  "S570C2", // class name
  bases_S570C2, 3,
  &(vtc_S570C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(352,284), // object size
  NSPAIRA(_ZTI6S570C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S570C2),91, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S570C1  : S570C2 {
  ::S273C7_nt s570c1f0;
  void *s570c1f1;
  virtual  ~S570C1(); // _ZN6S570C1D1Ev
  virtual void  v1(); // _ZN6S570C12v1Ev
  virtual void  v2(); // _ZN6S570C12v2Ev
  virtual void  v3(); // _ZN6S570C12v3Ev
  S570C1(); // tgen
};
//SIG(1 S570C1) C1{ BC2{ BC3{ BC4{ BC5{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC6{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC6 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC7{ BC8{ BC9{ m Fp Fi[2]}}} FC10{ BC11{ BC9}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 FC12{ m Fi[3]} Fc[2] FC6 FC13{ m Fi[3]} FC6} vd v88 v89 v90 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC14{ Fi[3]} FC14 FC15{ BC16{ BC9}} Fi[2] FC13 Fi FC13 FC17{ m Fp FC6}} vd v1 v2 v3 FC6 Fp}


 S570C1 ::~S570C1(){ note_dtor("S570C1", this);}
void  S570C1 ::v1(){vfunc_called(this, "_ZN6S570C12v1Ev");}
void  S570C1 ::v2(){vfunc_called(this, "_ZN6S570C12v2Ev");}
void  S570C1 ::v3(){vfunc_called(this, "_ZN6S570C12v3Ev");}
S570C1 ::S570C1(){ note_ctor("S570C1", this);} // tgen

static void Test_S570C1()
{
  extern Class_Descriptor cd_S570C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,75)];
    init_test(&cd_S570C1, buf);
    S570C1 *dp, &lv = *(dp=new (buf) S570C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,296), "sizeof(S570C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S570C1)");
    check_base_class_offset(lv, (S570C5*)(S570C4*)(S570C3*)(S570C2*), 0, "S570C1");
    check_base_class_offset(lv, (S570C4*)(S570C3*)(S570C2*), 0, "S570C1");
    check_base_class_offset(lv, (S570C3*)(S570C2*), 0, "S570C1");
    check_base_class_offset(lv, (S570C2*), 0, "S570C1");
    check_field_offset(lv, s570c1f0, ABISELECT(352,284), "S570C1.s570c1f0");
    check_field_offset(lv, s570c1f1, ABISELECT(360,292), "S570C1.s570c1f1");
    test_class_info(&lv, &cd_S570C1);
    dp->~S570C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS570C1(Test_S570C1, "S570C1", ABISELECT(368,296));

#else // __cplusplus

extern void _ZN6S570C1C1Ev();
extern void _ZN6S570C1D1Ev();
Name_Map name_map_S570C1[] = {
  NSPAIR(_ZN6S570C1C1Ev),
  NSPAIR(_ZN6S570C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S570C5;
extern VTBL_ENTRY _ZTI6S570C5[];
extern  VTBL_ENTRY _ZTV6S570C5[];
extern Class_Descriptor cd_S570C4;
extern VTBL_ENTRY _ZTI6S570C4[];
extern  VTBL_ENTRY _ZTV6S570C4[];
extern Class_Descriptor cd_S570C3;
extern VTBL_ENTRY _ZTI6S570C3[];
extern  VTBL_ENTRY _ZTV6S570C3[];
extern Class_Descriptor cd_S570C2;
extern VTBL_ENTRY _ZTI6S570C2[];
extern  VTBL_ENTRY _ZTV6S570C2[];
static Base_Class bases_S570C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S570C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S570C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S570C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S570C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S570C1[];
extern void _ZN6S570C1D1Ev();
extern void _ZN6S570C1D0Ev();
extern void _ZN6S570C52v4Ev();
extern void _ZN6S570C52v5Ev();
extern void _ZN6S570C52v6Ev();
extern void _ZN6S570C52v7Ev();
extern void _ZN6S570C52v8Ev();
extern void _ZN6S570C52v9Ev();
extern void _ZN6S570C53v10Ev();
extern void _ZN6S570C53v11Ev();
extern void _ZN6S570C53v12Ev();
extern void _ZN6S570C53v13Ev();
extern void _ZN6S570C53v14Ev();
extern void _ZN6S570C53v15Ev();
extern void _ZN6S570C53v16Ev();
extern void _ZN6S570C53v17Ev();
extern void _ZN6S570C53v18Ev();
extern void _ZN6S570C53v19Ev();
extern void _ZN6S570C53v20Ev();
extern void _ZN6S570C53v21Ev();
extern void _ZN6S570C53v22Ev();
extern void _ZN6S570C53v23Ev();
extern void _ZN6S570C53v24Ev();
extern void _ZN6S570C53v25Ev();
extern void _ZN6S570C53v26Ev();
extern void _ZN6S570C53v27Ev();
extern void _ZN6S570C53v28Ev();
extern void _ZN6S570C53v29Ev();
extern void _ZN6S570C53v30Ev();
extern void _ZN6S570C53v31Ev();
extern void _ZN6S570C53v32Ev();
extern void _ZN6S570C53v33Ev();
extern void _ZN6S570C53v34Ev();
extern void _ZN6S570C53v35Ev();
extern void _ZN6S570C53v36Ev();
extern void _ZN6S570C53v37Ev();
extern void _ZN6S570C53v38Ev();
extern void _ZN6S570C53v39Ev();
extern void _ZN6S570C53v40Ev();
extern void _ZN6S570C53v41Ev();
extern void _ZN6S570C53v42Ev();
extern void _ZN6S570C53v43Ev();
extern void _ZN6S570C53v44Ev();
extern void _ZN6S570C53v45Ev();
extern void _ZN6S570C53v46Ev();
extern void _ZN6S570C53v47Ev();
extern void _ZN6S570C53v48Ev();
extern void _ZN6S570C53v49Ev();
extern void _ZN6S570C53v50Ev();
extern void _ZN6S570C53v51Ev();
extern void _ZN6S570C53v52Ev();
extern void _ZN6S570C53v53Ev();
extern void _ZN6S570C53v54Ev();
extern void _ZN6S570C53v55Ev();
extern void _ZN6S570C53v56Ev();
extern void _ZN6S570C53v57Ev();
extern void _ZN6S570C53v58Ev();
extern void _ZN6S570C53v59Ev();
extern void _ZN6S570C53v60Ev();
extern void _ZN6S570C53v61Ev();
extern void _ZN6S570C53v62Ev();
extern void _ZN6S570C53v63Ev();
extern void _ZN6S570C53v64Ev();
extern void _ZN6S570C53v65Ev();
extern void _ZN6S570C53v66Ev();
extern void _ZN6S570C53v67Ev();
extern void _ZN6S570C43v68Ev();
extern void _ZN6S570C43v69Ev();
extern void _ZN6S570C43v70Ev();
extern void _ZN6S570C43v71Ev();
extern void _ZN6S570C43v72Ev();
extern void _ZN6S570C43v73Ev();
extern void _ZN6S570C43v74Ev();
extern void _ZN6S570C43v75Ev();
extern void _ZN6S570C43v76Ev();
extern void _ZN6S570C43v77Ev();
extern void _ZN6S570C43v78Ev();
extern void _ZN6S570C43v79Ev();
extern void _ZN6S570C43v80Ev();
extern void _ZN6S570C33v81Ev();
extern void _ZN6S570C33v82Ev();
extern void _ZN6S570C33v83Ev();
extern void _ZN6S570C33v84Ev();
extern void _ZN6S570C33v85Ev();
extern void _ZN6S570C33v86Ev();
extern void _ZN6S570C33v87Ev();
extern void _ZN6S570C23v88Ev();
extern void _ZN6S570C23v89Ev();
extern void _ZN6S570C23v90Ev();
extern void _ZN6S570C12v1Ev();
extern void _ZN6S570C12v2Ev();
extern void _ZN6S570C12v3Ev();
static  VTBL_ENTRY vtc_S570C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S570C1[0]),
  (VTBL_ENTRY)&_ZN6S570C1D1Ev,
  (VTBL_ENTRY)&_ZN6S570C1D0Ev,
  (VTBL_ENTRY)&_ZN6S570C52v4Ev,
  (VTBL_ENTRY)&_ZN6S570C52v5Ev,
  (VTBL_ENTRY)&_ZN6S570C52v6Ev,
  (VTBL_ENTRY)&_ZN6S570C52v7Ev,
  (VTBL_ENTRY)&_ZN6S570C52v8Ev,
  (VTBL_ENTRY)&_ZN6S570C52v9Ev,
  (VTBL_ENTRY)&_ZN6S570C53v10Ev,
  (VTBL_ENTRY)&_ZN6S570C53v11Ev,
  (VTBL_ENTRY)&_ZN6S570C53v12Ev,
  (VTBL_ENTRY)&_ZN6S570C53v13Ev,
  (VTBL_ENTRY)&_ZN6S570C53v14Ev,
  (VTBL_ENTRY)&_ZN6S570C53v15Ev,
  (VTBL_ENTRY)&_ZN6S570C53v16Ev,
  (VTBL_ENTRY)&_ZN6S570C53v17Ev,
  (VTBL_ENTRY)&_ZN6S570C53v18Ev,
  (VTBL_ENTRY)&_ZN6S570C53v19Ev,
  (VTBL_ENTRY)&_ZN6S570C53v20Ev,
  (VTBL_ENTRY)&_ZN6S570C53v21Ev,
  (VTBL_ENTRY)&_ZN6S570C53v22Ev,
  (VTBL_ENTRY)&_ZN6S570C53v23Ev,
  (VTBL_ENTRY)&_ZN6S570C53v24Ev,
  (VTBL_ENTRY)&_ZN6S570C53v25Ev,
  (VTBL_ENTRY)&_ZN6S570C53v26Ev,
  (VTBL_ENTRY)&_ZN6S570C53v27Ev,
  (VTBL_ENTRY)&_ZN6S570C53v28Ev,
  (VTBL_ENTRY)&_ZN6S570C53v29Ev,
  (VTBL_ENTRY)&_ZN6S570C53v30Ev,
  (VTBL_ENTRY)&_ZN6S570C53v31Ev,
  (VTBL_ENTRY)&_ZN6S570C53v32Ev,
  (VTBL_ENTRY)&_ZN6S570C53v33Ev,
  (VTBL_ENTRY)&_ZN6S570C53v34Ev,
  (VTBL_ENTRY)&_ZN6S570C53v35Ev,
  (VTBL_ENTRY)&_ZN6S570C53v36Ev,
  (VTBL_ENTRY)&_ZN6S570C53v37Ev,
  (VTBL_ENTRY)&_ZN6S570C53v38Ev,
  (VTBL_ENTRY)&_ZN6S570C53v39Ev,
  (VTBL_ENTRY)&_ZN6S570C53v40Ev,
  (VTBL_ENTRY)&_ZN6S570C53v41Ev,
  (VTBL_ENTRY)&_ZN6S570C53v42Ev,
  (VTBL_ENTRY)&_ZN6S570C53v43Ev,
  (VTBL_ENTRY)&_ZN6S570C53v44Ev,
  (VTBL_ENTRY)&_ZN6S570C53v45Ev,
  (VTBL_ENTRY)&_ZN6S570C53v46Ev,
  (VTBL_ENTRY)&_ZN6S570C53v47Ev,
  (VTBL_ENTRY)&_ZN6S570C53v48Ev,
  (VTBL_ENTRY)&_ZN6S570C53v49Ev,
  (VTBL_ENTRY)&_ZN6S570C53v50Ev,
  (VTBL_ENTRY)&_ZN6S570C53v51Ev,
  (VTBL_ENTRY)&_ZN6S570C53v52Ev,
  (VTBL_ENTRY)&_ZN6S570C53v53Ev,
  (VTBL_ENTRY)&_ZN6S570C53v54Ev,
  (VTBL_ENTRY)&_ZN6S570C53v55Ev,
  (VTBL_ENTRY)&_ZN6S570C53v56Ev,
  (VTBL_ENTRY)&_ZN6S570C53v57Ev,
  (VTBL_ENTRY)&_ZN6S570C53v58Ev,
  (VTBL_ENTRY)&_ZN6S570C53v59Ev,
  (VTBL_ENTRY)&_ZN6S570C53v60Ev,
  (VTBL_ENTRY)&_ZN6S570C53v61Ev,
  (VTBL_ENTRY)&_ZN6S570C53v62Ev,
  (VTBL_ENTRY)&_ZN6S570C53v63Ev,
  (VTBL_ENTRY)&_ZN6S570C53v64Ev,
  (VTBL_ENTRY)&_ZN6S570C53v65Ev,
  (VTBL_ENTRY)&_ZN6S570C53v66Ev,
  (VTBL_ENTRY)&_ZN6S570C53v67Ev,
  (VTBL_ENTRY)&_ZN6S570C43v68Ev,
  (VTBL_ENTRY)&_ZN6S570C43v69Ev,
  (VTBL_ENTRY)&_ZN6S570C43v70Ev,
  (VTBL_ENTRY)&_ZN6S570C43v71Ev,
  (VTBL_ENTRY)&_ZN6S570C43v72Ev,
  (VTBL_ENTRY)&_ZN6S570C43v73Ev,
  (VTBL_ENTRY)&_ZN6S570C43v74Ev,
  (VTBL_ENTRY)&_ZN6S570C43v75Ev,
  (VTBL_ENTRY)&_ZN6S570C43v76Ev,
  (VTBL_ENTRY)&_ZN6S570C43v77Ev,
  (VTBL_ENTRY)&_ZN6S570C43v78Ev,
  (VTBL_ENTRY)&_ZN6S570C43v79Ev,
  (VTBL_ENTRY)&_ZN6S570C43v80Ev,
  (VTBL_ENTRY)&_ZN6S570C33v81Ev,
  (VTBL_ENTRY)&_ZN6S570C33v82Ev,
  (VTBL_ENTRY)&_ZN6S570C33v83Ev,
  (VTBL_ENTRY)&_ZN6S570C33v84Ev,
  (VTBL_ENTRY)&_ZN6S570C33v85Ev,
  (VTBL_ENTRY)&_ZN6S570C33v86Ev,
  (VTBL_ENTRY)&_ZN6S570C33v87Ev,
  (VTBL_ENTRY)&_ZN6S570C23v88Ev,
  (VTBL_ENTRY)&_ZN6S570C23v89Ev,
  (VTBL_ENTRY)&_ZN6S570C23v90Ev,
  (VTBL_ENTRY)&_ZN6S570C12v1Ev,
  (VTBL_ENTRY)&_ZN6S570C12v2Ev,
  (VTBL_ENTRY)&_ZN6S570C12v3Ev,
};
extern VTBL_ENTRY _ZTI6S570C1[];
extern  VTBL_ENTRY _ZTV6S570C1[];
Class_Descriptor cd_S570C1 = {  "S570C1", // class name
  bases_S570C1, 4,
  &(vtc_S570C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,296), // object size
  NSPAIRA(_ZTI6S570C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S570C1),94, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1435C4  {
  int s1435c4f0;
  __tsi64 s1435c4f1;
  void *s1435c4f2[4];
  int s1435c4f3[2];
  void *s1435c4f4;
  ::S273C7_nt s1435c4f5;
  void *s1435c4f6[2];
  virtual  ~S1435C4(); // _ZN7S1435C4D1Ev
  virtual void  v4(); // _ZN7S1435C42v4Ev
  virtual void  v5(); // _ZN7S1435C42v5Ev
  virtual void  v6(); // _ZN7S1435C42v6Ev
  virtual void  v7(); // _ZN7S1435C42v7Ev
  virtual void  v8(); // _ZN7S1435C42v8Ev
  virtual void  v9(); // _ZN7S1435C42v9Ev
  virtual void  v10(); // _ZN7S1435C43v10Ev
  virtual void  v11(); // _ZN7S1435C43v11Ev
  virtual void  v12(); // _ZN7S1435C43v12Ev
  virtual void  v13(); // _ZN7S1435C43v13Ev
  virtual void  v14(); // _ZN7S1435C43v14Ev
  virtual void  v15(); // _ZN7S1435C43v15Ev
  virtual void  v16(); // _ZN7S1435C43v16Ev
  virtual void  v17(); // _ZN7S1435C43v17Ev
  virtual void  v18(); // _ZN7S1435C43v18Ev
  virtual void  v19(); // _ZN7S1435C43v19Ev
  virtual void  v20(); // _ZN7S1435C43v20Ev
  virtual void  v21(); // _ZN7S1435C43v21Ev
  virtual void  v22(); // _ZN7S1435C43v22Ev
  virtual void  v23(); // _ZN7S1435C43v23Ev
  virtual void  v24(); // _ZN7S1435C43v24Ev
  virtual void  v25(); // _ZN7S1435C43v25Ev
  virtual void  v26(); // _ZN7S1435C43v26Ev
  virtual void  v27(); // _ZN7S1435C43v27Ev
  virtual void  v28(); // _ZN7S1435C43v28Ev
  virtual void  v29(); // _ZN7S1435C43v29Ev
  virtual void  v30(); // _ZN7S1435C43v30Ev
  virtual void  v31(); // _ZN7S1435C43v31Ev
  virtual void  v32(); // _ZN7S1435C43v32Ev
  virtual void  v33(); // _ZN7S1435C43v33Ev
  virtual void  v34(); // _ZN7S1435C43v34Ev
  virtual void  v35(); // _ZN7S1435C43v35Ev
  virtual void  v36(); // _ZN7S1435C43v36Ev
  virtual void  v37(); // _ZN7S1435C43v37Ev
  virtual void  v38(); // _ZN7S1435C43v38Ev
  virtual void  v39(); // _ZN7S1435C43v39Ev
  virtual void  v40(); // _ZN7S1435C43v40Ev
  virtual void  v41(); // _ZN7S1435C43v41Ev
  virtual void  v42(); // _ZN7S1435C43v42Ev
  virtual void  v43(); // _ZN7S1435C43v43Ev
  virtual void  v44(); // _ZN7S1435C43v44Ev
  virtual void  v45(); // _ZN7S1435C43v45Ev
  virtual void  v46(); // _ZN7S1435C43v46Ev
  virtual void  v47(); // _ZN7S1435C43v47Ev
  virtual void  v48(); // _ZN7S1435C43v48Ev
  virtual void  v49(); // _ZN7S1435C43v49Ev
  virtual void  v50(); // _ZN7S1435C43v50Ev
  virtual void  v51(); // _ZN7S1435C43v51Ev
  virtual void  v52(); // _ZN7S1435C43v52Ev
  virtual void  v53(); // _ZN7S1435C43v53Ev
  virtual void  v54(); // _ZN7S1435C43v54Ev
  virtual void  v55(); // _ZN7S1435C43v55Ev
  virtual void  v56(); // _ZN7S1435C43v56Ev
  virtual void  v57(); // _ZN7S1435C43v57Ev
  virtual void  v58(); // _ZN7S1435C43v58Ev
  virtual void  v59(); // _ZN7S1435C43v59Ev
  virtual void  v60(); // _ZN7S1435C43v60Ev
  virtual void  v61(); // _ZN7S1435C43v61Ev
  virtual void  v62(); // _ZN7S1435C43v62Ev
  virtual void  v63(); // _ZN7S1435C43v63Ev
  virtual void  v64(); // _ZN7S1435C43v64Ev
  virtual void  v65(); // _ZN7S1435C43v65Ev
  virtual void  v66(); // _ZN7S1435C43v66Ev
  virtual void  v67(); // _ZN7S1435C43v67Ev
  S1435C4(); // tgen
};
//SIG(-1 S1435C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1435C4 ::~S1435C4(){ note_dtor("S1435C4", this);}
void  S1435C4 ::v4(){vfunc_called(this, "_ZN7S1435C42v4Ev");}
void  S1435C4 ::v5(){vfunc_called(this, "_ZN7S1435C42v5Ev");}
void  S1435C4 ::v6(){vfunc_called(this, "_ZN7S1435C42v6Ev");}
void  S1435C4 ::v7(){vfunc_called(this, "_ZN7S1435C42v7Ev");}
void  S1435C4 ::v8(){vfunc_called(this, "_ZN7S1435C42v8Ev");}
void  S1435C4 ::v9(){vfunc_called(this, "_ZN7S1435C42v9Ev");}
void  S1435C4 ::v10(){vfunc_called(this, "_ZN7S1435C43v10Ev");}
void  S1435C4 ::v11(){vfunc_called(this, "_ZN7S1435C43v11Ev");}
void  S1435C4 ::v12(){vfunc_called(this, "_ZN7S1435C43v12Ev");}
void  S1435C4 ::v13(){vfunc_called(this, "_ZN7S1435C43v13Ev");}
void  S1435C4 ::v14(){vfunc_called(this, "_ZN7S1435C43v14Ev");}
void  S1435C4 ::v15(){vfunc_called(this, "_ZN7S1435C43v15Ev");}
void  S1435C4 ::v16(){vfunc_called(this, "_ZN7S1435C43v16Ev");}
void  S1435C4 ::v17(){vfunc_called(this, "_ZN7S1435C43v17Ev");}
void  S1435C4 ::v18(){vfunc_called(this, "_ZN7S1435C43v18Ev");}
void  S1435C4 ::v19(){vfunc_called(this, "_ZN7S1435C43v19Ev");}
void  S1435C4 ::v20(){vfunc_called(this, "_ZN7S1435C43v20Ev");}
void  S1435C4 ::v21(){vfunc_called(this, "_ZN7S1435C43v21Ev");}
void  S1435C4 ::v22(){vfunc_called(this, "_ZN7S1435C43v22Ev");}
void  S1435C4 ::v23(){vfunc_called(this, "_ZN7S1435C43v23Ev");}
void  S1435C4 ::v24(){vfunc_called(this, "_ZN7S1435C43v24Ev");}
void  S1435C4 ::v25(){vfunc_called(this, "_ZN7S1435C43v25Ev");}
void  S1435C4 ::v26(){vfunc_called(this, "_ZN7S1435C43v26Ev");}
void  S1435C4 ::v27(){vfunc_called(this, "_ZN7S1435C43v27Ev");}
void  S1435C4 ::v28(){vfunc_called(this, "_ZN7S1435C43v28Ev");}
void  S1435C4 ::v29(){vfunc_called(this, "_ZN7S1435C43v29Ev");}
void  S1435C4 ::v30(){vfunc_called(this, "_ZN7S1435C43v30Ev");}
void  S1435C4 ::v31(){vfunc_called(this, "_ZN7S1435C43v31Ev");}
void  S1435C4 ::v32(){vfunc_called(this, "_ZN7S1435C43v32Ev");}
void  S1435C4 ::v33(){vfunc_called(this, "_ZN7S1435C43v33Ev");}
void  S1435C4 ::v34(){vfunc_called(this, "_ZN7S1435C43v34Ev");}
void  S1435C4 ::v35(){vfunc_called(this, "_ZN7S1435C43v35Ev");}
void  S1435C4 ::v36(){vfunc_called(this, "_ZN7S1435C43v36Ev");}
void  S1435C4 ::v37(){vfunc_called(this, "_ZN7S1435C43v37Ev");}
void  S1435C4 ::v38(){vfunc_called(this, "_ZN7S1435C43v38Ev");}
void  S1435C4 ::v39(){vfunc_called(this, "_ZN7S1435C43v39Ev");}
void  S1435C4 ::v40(){vfunc_called(this, "_ZN7S1435C43v40Ev");}
void  S1435C4 ::v41(){vfunc_called(this, "_ZN7S1435C43v41Ev");}
void  S1435C4 ::v42(){vfunc_called(this, "_ZN7S1435C43v42Ev");}
void  S1435C4 ::v43(){vfunc_called(this, "_ZN7S1435C43v43Ev");}
void  S1435C4 ::v44(){vfunc_called(this, "_ZN7S1435C43v44Ev");}
void  S1435C4 ::v45(){vfunc_called(this, "_ZN7S1435C43v45Ev");}
void  S1435C4 ::v46(){vfunc_called(this, "_ZN7S1435C43v46Ev");}
void  S1435C4 ::v47(){vfunc_called(this, "_ZN7S1435C43v47Ev");}
void  S1435C4 ::v48(){vfunc_called(this, "_ZN7S1435C43v48Ev");}
void  S1435C4 ::v49(){vfunc_called(this, "_ZN7S1435C43v49Ev");}
void  S1435C4 ::v50(){vfunc_called(this, "_ZN7S1435C43v50Ev");}
void  S1435C4 ::v51(){vfunc_called(this, "_ZN7S1435C43v51Ev");}
void  S1435C4 ::v52(){vfunc_called(this, "_ZN7S1435C43v52Ev");}
void  S1435C4 ::v53(){vfunc_called(this, "_ZN7S1435C43v53Ev");}
void  S1435C4 ::v54(){vfunc_called(this, "_ZN7S1435C43v54Ev");}
void  S1435C4 ::v55(){vfunc_called(this, "_ZN7S1435C43v55Ev");}
void  S1435C4 ::v56(){vfunc_called(this, "_ZN7S1435C43v56Ev");}
void  S1435C4 ::v57(){vfunc_called(this, "_ZN7S1435C43v57Ev");}
void  S1435C4 ::v58(){vfunc_called(this, "_ZN7S1435C43v58Ev");}
void  S1435C4 ::v59(){vfunc_called(this, "_ZN7S1435C43v59Ev");}
void  S1435C4 ::v60(){vfunc_called(this, "_ZN7S1435C43v60Ev");}
void  S1435C4 ::v61(){vfunc_called(this, "_ZN7S1435C43v61Ev");}
void  S1435C4 ::v62(){vfunc_called(this, "_ZN7S1435C43v62Ev");}
void  S1435C4 ::v63(){vfunc_called(this, "_ZN7S1435C43v63Ev");}
void  S1435C4 ::v64(){vfunc_called(this, "_ZN7S1435C43v64Ev");}
void  S1435C4 ::v65(){vfunc_called(this, "_ZN7S1435C43v65Ev");}
void  S1435C4 ::v66(){vfunc_called(this, "_ZN7S1435C43v66Ev");}
void  S1435C4 ::v67(){vfunc_called(this, "_ZN7S1435C43v67Ev");}
S1435C4 ::S1435C4(){ note_ctor("S1435C4", this);} // tgen

static void Test_S1435C4()
{
  extern Class_Descriptor cd_S1435C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1435C4, buf);
    S1435C4 *dp, &lv = *(dp=new (buf) S1435C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1435C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1435C4)");
    check_field_offset(lv, s1435c4f0, ABISELECT(8,4), "S1435C4.s1435c4f0");
    check_field_offset(lv, s1435c4f1, ABISELECT(16,8), "S1435C4.s1435c4f1");
    check_field_offset(lv, s1435c4f2, ABISELECT(24,16), "S1435C4.s1435c4f2");
    check_field_offset(lv, s1435c4f3, ABISELECT(56,32), "S1435C4.s1435c4f3");
    check_field_offset(lv, s1435c4f4, ABISELECT(64,40), "S1435C4.s1435c4f4");
    check_field_offset(lv, s1435c4f5, ABISELECT(72,44), "S1435C4.s1435c4f5");
    check_field_offset(lv, s1435c4f6, ABISELECT(80,52), "S1435C4.s1435c4f6");
    test_class_info(&lv, &cd_S1435C4);
    dp->~S1435C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1435C4(Test_S1435C4, "S1435C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1435C4C1Ev();
extern void _ZN7S1435C4D1Ev();
Name_Map name_map_S1435C4[] = {
  NSPAIR(_ZN7S1435C4C1Ev),
  NSPAIR(_ZN7S1435C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1435C4[];
extern void _ZN7S1435C4D1Ev();
extern void _ZN7S1435C4D0Ev();
extern void _ZN7S1435C42v4Ev();
extern void _ZN7S1435C42v5Ev();
extern void _ZN7S1435C42v6Ev();
extern void _ZN7S1435C42v7Ev();
extern void _ZN7S1435C42v8Ev();
extern void _ZN7S1435C42v9Ev();
extern void _ZN7S1435C43v10Ev();
extern void _ZN7S1435C43v11Ev();
extern void _ZN7S1435C43v12Ev();
extern void _ZN7S1435C43v13Ev();
extern void _ZN7S1435C43v14Ev();
extern void _ZN7S1435C43v15Ev();
extern void _ZN7S1435C43v16Ev();
extern void _ZN7S1435C43v17Ev();
extern void _ZN7S1435C43v18Ev();
extern void _ZN7S1435C43v19Ev();
extern void _ZN7S1435C43v20Ev();
extern void _ZN7S1435C43v21Ev();
extern void _ZN7S1435C43v22Ev();
extern void _ZN7S1435C43v23Ev();
extern void _ZN7S1435C43v24Ev();
extern void _ZN7S1435C43v25Ev();
extern void _ZN7S1435C43v26Ev();
extern void _ZN7S1435C43v27Ev();
extern void _ZN7S1435C43v28Ev();
extern void _ZN7S1435C43v29Ev();
extern void _ZN7S1435C43v30Ev();
extern void _ZN7S1435C43v31Ev();
extern void _ZN7S1435C43v32Ev();
extern void _ZN7S1435C43v33Ev();
extern void _ZN7S1435C43v34Ev();
extern void _ZN7S1435C43v35Ev();
extern void _ZN7S1435C43v36Ev();
extern void _ZN7S1435C43v37Ev();
extern void _ZN7S1435C43v38Ev();
extern void _ZN7S1435C43v39Ev();
extern void _ZN7S1435C43v40Ev();
extern void _ZN7S1435C43v41Ev();
extern void _ZN7S1435C43v42Ev();
extern void _ZN7S1435C43v43Ev();
extern void _ZN7S1435C43v44Ev();
extern void _ZN7S1435C43v45Ev();
extern void _ZN7S1435C43v46Ev();
extern void _ZN7S1435C43v47Ev();
extern void _ZN7S1435C43v48Ev();
extern void _ZN7S1435C43v49Ev();
extern void _ZN7S1435C43v50Ev();
extern void _ZN7S1435C43v51Ev();
extern void _ZN7S1435C43v52Ev();
extern void _ZN7S1435C43v53Ev();
extern void _ZN7S1435C43v54Ev();
extern void _ZN7S1435C43v55Ev();
extern void _ZN7S1435C43v56Ev();
extern void _ZN7S1435C43v57Ev();
extern void _ZN7S1435C43v58Ev();
extern void _ZN7S1435C43v59Ev();
extern void _ZN7S1435C43v60Ev();
extern void _ZN7S1435C43v61Ev();
extern void _ZN7S1435C43v62Ev();
extern void _ZN7S1435C43v63Ev();
extern void _ZN7S1435C43v64Ev();
extern void _ZN7S1435C43v65Ev();
extern void _ZN7S1435C43v66Ev();
extern void _ZN7S1435C43v67Ev();
static  VTBL_ENTRY vtc_S1435C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1435C4[0]),
  (VTBL_ENTRY)&_ZN7S1435C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1435C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v67Ev,
};
extern VTBL_ENTRY _ZTI7S1435C4[];
extern  VTBL_ENTRY _ZTV7S1435C4[];
Class_Descriptor cd_S1435C4 = {  "S1435C4", // class name
  0,0,//no base classes
  &(vtc_S1435C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1435C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1435C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1435C3  : S1435C4 {
  void *s1435c3f0;
  ::S273C7_nt s1435c3f1;
  int s1435c3f2[5];
  unsigned int s1435c3f3:1;
  unsigned int s1435c3f4:1;
  unsigned int s1435c3f5:1;
  unsigned int s1435c3f6:1;
  unsigned int s1435c3f7:1;
  ::S273C21 s1435c3f8;
  ::S273C17 s1435c3f9;
  unsigned int s1435c3f10:1;
  int s1435c3f11[2];
  void *s1435c3f12;
  int s1435c3f13[3];
  virtual  ~S1435C3(); // _ZN7S1435C3D1Ev
  virtual void  v68(); // _ZN7S1435C33v68Ev
  virtual void  v69(); // _ZN7S1435C33v69Ev
  virtual void  v70(); // _ZN7S1435C33v70Ev
  virtual void  v71(); // _ZN7S1435C33v71Ev
  virtual void  v72(); // _ZN7S1435C33v72Ev
  virtual void  v73(); // _ZN7S1435C33v73Ev
  virtual void  v74(); // _ZN7S1435C33v74Ev
  virtual void  v75(); // _ZN7S1435C33v75Ev
  virtual void  v76(); // _ZN7S1435C33v76Ev
  virtual void  v77(); // _ZN7S1435C33v77Ev
  virtual void  v78(); // _ZN7S1435C33v78Ev
  virtual void  v79(); // _ZN7S1435C33v79Ev
  virtual void  v80(); // _ZN7S1435C33v80Ev
  S1435C3(); // tgen
};
//SIG(-1 S1435C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1435C3 ::~S1435C3(){ note_dtor("S1435C3", this);}
void  S1435C3 ::v68(){vfunc_called(this, "_ZN7S1435C33v68Ev");}
void  S1435C3 ::v69(){vfunc_called(this, "_ZN7S1435C33v69Ev");}
void  S1435C3 ::v70(){vfunc_called(this, "_ZN7S1435C33v70Ev");}
void  S1435C3 ::v71(){vfunc_called(this, "_ZN7S1435C33v71Ev");}
void  S1435C3 ::v72(){vfunc_called(this, "_ZN7S1435C33v72Ev");}
void  S1435C3 ::v73(){vfunc_called(this, "_ZN7S1435C33v73Ev");}
void  S1435C3 ::v74(){vfunc_called(this, "_ZN7S1435C33v74Ev");}
void  S1435C3 ::v75(){vfunc_called(this, "_ZN7S1435C33v75Ev");}
void  S1435C3 ::v76(){vfunc_called(this, "_ZN7S1435C33v76Ev");}
void  S1435C3 ::v77(){vfunc_called(this, "_ZN7S1435C33v77Ev");}
void  S1435C3 ::v78(){vfunc_called(this, "_ZN7S1435C33v78Ev");}
void  S1435C3 ::v79(){vfunc_called(this, "_ZN7S1435C33v79Ev");}
void  S1435C3 ::v80(){vfunc_called(this, "_ZN7S1435C33v80Ev");}
S1435C3 ::S1435C3(){ note_ctor("S1435C3", this);} // tgen

static void Test_S1435C3()
{
  extern Class_Descriptor cd_S1435C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1435C3, buf);
    S1435C3 *dp, &lv = *(dp=new (buf) S1435C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1435C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1435C3)");
    check_base_class_offset(lv, (S1435C4*), 0, "S1435C3");
    check_field_offset(lv, s1435c3f0, ABISELECT(96,60), "S1435C3.s1435c3f0");
    check_field_offset(lv, s1435c3f1, ABISELECT(104,64), "S1435C3.s1435c3f1");
    check_field_offset(lv, s1435c3f2, ABISELECT(112,72), "S1435C3.s1435c3f2");
    set_bf_and_test(lv, s1435c3f3, ABISELECT(132,92), 0, 1, 1, "S1435C3");
    set_bf_and_test(lv, s1435c3f4, ABISELECT(132,92), 1, 1, 1, "S1435C3");
    set_bf_and_test(lv, s1435c3f5, ABISELECT(132,92), 2, 1, 1, "S1435C3");
    set_bf_and_test(lv, s1435c3f6, ABISELECT(132,92), 3, 1, 1, "S1435C3");
    set_bf_and_test(lv, s1435c3f7, ABISELECT(132,92), 4, 1, 1, "S1435C3");
    check_field_offset(lv, s1435c3f8, ABISELECT(136,96), "S1435C3.s1435c3f8");
    check_field_offset(lv, s1435c3f9, ABISELECT(152,108), "S1435C3.s1435c3f9");
    set_bf_and_test(lv, s1435c3f10, ABISELECT(168,120), 0, 1, 1, "S1435C3");
    check_field_offset(lv, s1435c3f11, ABISELECT(172,124), "S1435C3.s1435c3f11");
    check_field_offset(lv, s1435c3f12, ABISELECT(184,132), "S1435C3.s1435c3f12");
    check_field_offset(lv, s1435c3f13, ABISELECT(192,136), "S1435C3.s1435c3f13");
    test_class_info(&lv, &cd_S1435C3);
    dp->~S1435C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1435C3(Test_S1435C3, "S1435C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1435C3C1Ev();
extern void _ZN7S1435C3D1Ev();
Name_Map name_map_S1435C3[] = {
  NSPAIR(_ZN7S1435C3C1Ev),
  NSPAIR(_ZN7S1435C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1435C4;
extern VTBL_ENTRY _ZTI7S1435C4[];
extern  VTBL_ENTRY _ZTV7S1435C4[];
static Base_Class bases_S1435C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1435C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1435C3[];
extern void _ZN7S1435C3D1Ev();
extern void _ZN7S1435C3D0Ev();
extern void _ZN7S1435C42v4Ev();
extern void _ZN7S1435C42v5Ev();
extern void _ZN7S1435C42v6Ev();
extern void _ZN7S1435C42v7Ev();
extern void _ZN7S1435C42v8Ev();
extern void _ZN7S1435C42v9Ev();
extern void _ZN7S1435C43v10Ev();
extern void _ZN7S1435C43v11Ev();
extern void _ZN7S1435C43v12Ev();
extern void _ZN7S1435C43v13Ev();
extern void _ZN7S1435C43v14Ev();
extern void _ZN7S1435C43v15Ev();
extern void _ZN7S1435C43v16Ev();
extern void _ZN7S1435C43v17Ev();
extern void _ZN7S1435C43v18Ev();
extern void _ZN7S1435C43v19Ev();
extern void _ZN7S1435C43v20Ev();
extern void _ZN7S1435C43v21Ev();
extern void _ZN7S1435C43v22Ev();
extern void _ZN7S1435C43v23Ev();
extern void _ZN7S1435C43v24Ev();
extern void _ZN7S1435C43v25Ev();
extern void _ZN7S1435C43v26Ev();
extern void _ZN7S1435C43v27Ev();
extern void _ZN7S1435C43v28Ev();
extern void _ZN7S1435C43v29Ev();
extern void _ZN7S1435C43v30Ev();
extern void _ZN7S1435C43v31Ev();
extern void _ZN7S1435C43v32Ev();
extern void _ZN7S1435C43v33Ev();
extern void _ZN7S1435C43v34Ev();
extern void _ZN7S1435C43v35Ev();
extern void _ZN7S1435C43v36Ev();
extern void _ZN7S1435C43v37Ev();
extern void _ZN7S1435C43v38Ev();
extern void _ZN7S1435C43v39Ev();
extern void _ZN7S1435C43v40Ev();
extern void _ZN7S1435C43v41Ev();
extern void _ZN7S1435C43v42Ev();
extern void _ZN7S1435C43v43Ev();
extern void _ZN7S1435C43v44Ev();
extern void _ZN7S1435C43v45Ev();
extern void _ZN7S1435C43v46Ev();
extern void _ZN7S1435C43v47Ev();
extern void _ZN7S1435C43v48Ev();
extern void _ZN7S1435C43v49Ev();
extern void _ZN7S1435C43v50Ev();
extern void _ZN7S1435C43v51Ev();
extern void _ZN7S1435C43v52Ev();
extern void _ZN7S1435C43v53Ev();
extern void _ZN7S1435C43v54Ev();
extern void _ZN7S1435C43v55Ev();
extern void _ZN7S1435C43v56Ev();
extern void _ZN7S1435C43v57Ev();
extern void _ZN7S1435C43v58Ev();
extern void _ZN7S1435C43v59Ev();
extern void _ZN7S1435C43v60Ev();
extern void _ZN7S1435C43v61Ev();
extern void _ZN7S1435C43v62Ev();
extern void _ZN7S1435C43v63Ev();
extern void _ZN7S1435C43v64Ev();
extern void _ZN7S1435C43v65Ev();
extern void _ZN7S1435C43v66Ev();
extern void _ZN7S1435C43v67Ev();
extern void _ZN7S1435C33v68Ev();
extern void _ZN7S1435C33v69Ev();
extern void _ZN7S1435C33v70Ev();
extern void _ZN7S1435C33v71Ev();
extern void _ZN7S1435C33v72Ev();
extern void _ZN7S1435C33v73Ev();
extern void _ZN7S1435C33v74Ev();
extern void _ZN7S1435C33v75Ev();
extern void _ZN7S1435C33v76Ev();
extern void _ZN7S1435C33v77Ev();
extern void _ZN7S1435C33v78Ev();
extern void _ZN7S1435C33v79Ev();
extern void _ZN7S1435C33v80Ev();
static  VTBL_ENTRY vtc_S1435C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1435C3[0]),
  (VTBL_ENTRY)&_ZN7S1435C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1435C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S1435C3[];
extern  VTBL_ENTRY _ZTV7S1435C3[];
Class_Descriptor cd_S1435C3 = {  "S1435C3", // class name
  bases_S1435C3, 1,
  &(vtc_S1435C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1435C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1435C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1435C2  : S1435C3 {
  ::S664C12_nt s1435c2f0;
  char s1435c2f1[4];
  ::S273C7_nt s1435c2f2;
  unsigned int s1435c2f3:1;
  unsigned int s1435c2f4:1;
  unsigned int s1435c2f5:1;
  unsigned int s1435c2f6:1;
  unsigned int s1435c2f7:1;
  unsigned int s1435c2f8:1;
  unsigned int s1435c2f9:1;
  unsigned int s1435c2f10:1;
  unsigned int s1435c2f11:1;
  unsigned int s1435c2f12:1;
  unsigned int s1435c2f13:1;
  int s1435c2f14;
  ::S664C12_nt s1435c2f15;
  int s1435c2f16[2];
  ::S273C7_nt s1435c2f17;
  int s1435c2f18[3];
  ::S664C12_nt s1435c2f19;
  ::S664C12_nt s1435c2f20;
  ::S664C12_nt s1435c2f21;
  int s1435c2f22;
  virtual  ~S1435C2(); // _ZN7S1435C2D1Ev
  virtual void  v81(); // _ZN7S1435C23v81Ev
  virtual void  v82(); // _ZN7S1435C23v82Ev
  virtual void  v83(); // _ZN7S1435C23v83Ev
  virtual void  v84(); // _ZN7S1435C23v84Ev
  virtual void  v85(); // _ZN7S1435C23v85Ev
  virtual void  v86(); // _ZN7S1435C23v86Ev
  virtual void  v87(); // _ZN7S1435C23v87Ev
  virtual void  v88(); // _ZN7S1435C23v88Ev
  virtual void  v89(); // _ZN7S1435C23v89Ev
  virtual void  v90(); // _ZN7S1435C23v90Ev
  virtual void  v91(); // _ZN7S1435C23v91Ev
  S1435C2(); // tgen
};
//SIG(-1 S1435C2) C1{ BC2{ BC3{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC10{ m Fi[3]} Fc[4] FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi FC10 Fi[2] FC4 Fi[3] FC10 FC10 FC10 Fi}


 S1435C2 ::~S1435C2(){ note_dtor("S1435C2", this);}
void  S1435C2 ::v81(){vfunc_called(this, "_ZN7S1435C23v81Ev");}
void  S1435C2 ::v82(){vfunc_called(this, "_ZN7S1435C23v82Ev");}
void  S1435C2 ::v83(){vfunc_called(this, "_ZN7S1435C23v83Ev");}
void  S1435C2 ::v84(){vfunc_called(this, "_ZN7S1435C23v84Ev");}
void  S1435C2 ::v85(){vfunc_called(this, "_ZN7S1435C23v85Ev");}
void  S1435C2 ::v86(){vfunc_called(this, "_ZN7S1435C23v86Ev");}
void  S1435C2 ::v87(){vfunc_called(this, "_ZN7S1435C23v87Ev");}
void  S1435C2 ::v88(){vfunc_called(this, "_ZN7S1435C23v88Ev");}
void  S1435C2 ::v89(){vfunc_called(this, "_ZN7S1435C23v89Ev");}
void  S1435C2 ::v90(){vfunc_called(this, "_ZN7S1435C23v90Ev");}
void  S1435C2 ::v91(){vfunc_called(this, "_ZN7S1435C23v91Ev");}
S1435C2 ::S1435C2(){ note_ctor("S1435C2", this);} // tgen

static void Test_S1435C2()
{
  extern Class_Descriptor cd_S1435C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,66)];
    init_test(&cd_S1435C2, buf);
    S1435C2 *dp, &lv = *(dp=new (buf) S1435C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,260), "sizeof(S1435C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1435C2)");
    check_base_class_offset(lv, (S1435C4*)(S1435C3*), 0, "S1435C2");
    check_base_class_offset(lv, (S1435C3*), 0, "S1435C2");
    check_field_offset(lv, s1435c2f0, ABISELECT(204,148), "S1435C2.s1435c2f0");
    check_field_offset(lv, s1435c2f1, ABISELECT(216,160), "S1435C2.s1435c2f1");
    check_field_offset(lv, s1435c2f2, ABISELECT(220,164), "S1435C2.s1435c2f2");
    set_bf_and_test(lv, s1435c2f3, ABISELECT(228,172), 0, 1, 1, "S1435C2");
    set_bf_and_test(lv, s1435c2f4, ABISELECT(228,172), 1, 1, 1, "S1435C2");
    set_bf_and_test(lv, s1435c2f5, ABISELECT(228,172), 2, 1, 1, "S1435C2");
    set_bf_and_test(lv, s1435c2f6, ABISELECT(228,172), 3, 1, 1, "S1435C2");
    set_bf_and_test(lv, s1435c2f7, ABISELECT(228,172), 4, 1, 1, "S1435C2");
    set_bf_and_test(lv, s1435c2f8, ABISELECT(228,172), 5, 1, 1, "S1435C2");
    set_bf_and_test(lv, s1435c2f9, ABISELECT(228,172), 6, 1, 1, "S1435C2");
    set_bf_and_test(lv, s1435c2f10, ABISELECT(228,172), 7, 1, 1, "S1435C2");
    set_bf_and_test(lv, s1435c2f11, ABISELECT(229,173), 0, 1, 1, "S1435C2");
    set_bf_and_test(lv, s1435c2f12, ABISELECT(229,173), 1, 1, 1, "S1435C2");
    set_bf_and_test(lv, s1435c2f13, ABISELECT(229,173), 2, 1, 1, "S1435C2");
    check_field_offset(lv, s1435c2f14, ABISELECT(232,176), "S1435C2.s1435c2f14");
    check_field_offset(lv, s1435c2f15, ABISELECT(236,180), "S1435C2.s1435c2f15");
    check_field_offset(lv, s1435c2f16, ABISELECT(248,192), "S1435C2.s1435c2f16");
    check_field_offset(lv, s1435c2f17, ABISELECT(256,200), "S1435C2.s1435c2f17");
    check_field_offset(lv, s1435c2f18, ABISELECT(264,208), "S1435C2.s1435c2f18");
    check_field_offset(lv, s1435c2f19, ABISELECT(276,220), "S1435C2.s1435c2f19");
    check_field_offset(lv, s1435c2f20, ABISELECT(288,232), "S1435C2.s1435c2f20");
    check_field_offset(lv, s1435c2f21, ABISELECT(300,244), "S1435C2.s1435c2f21");
    check_field_offset(lv, s1435c2f22, ABISELECT(312,256), "S1435C2.s1435c2f22");
    test_class_info(&lv, &cd_S1435C2);
    dp->~S1435C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1435C2(Test_S1435C2, "S1435C2", ABISELECT(320,260));

#else // __cplusplus

extern void _ZN7S1435C2C1Ev();
extern void _ZN7S1435C2D1Ev();
Name_Map name_map_S1435C2[] = {
  NSPAIR(_ZN7S1435C2C1Ev),
  NSPAIR(_ZN7S1435C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1435C4;
extern VTBL_ENTRY _ZTI7S1435C4[];
extern  VTBL_ENTRY _ZTV7S1435C4[];
extern Class_Descriptor cd_S1435C3;
extern VTBL_ENTRY _ZTI7S1435C3[];
extern  VTBL_ENTRY _ZTV7S1435C3[];
static Base_Class bases_S1435C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1435C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1435C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1435C2[];
extern void _ZN7S1435C2D1Ev();
extern void _ZN7S1435C2D0Ev();
extern void _ZN7S1435C42v4Ev();
extern void _ZN7S1435C42v5Ev();
extern void _ZN7S1435C42v6Ev();
extern void _ZN7S1435C42v7Ev();
extern void _ZN7S1435C42v8Ev();
extern void _ZN7S1435C42v9Ev();
extern void _ZN7S1435C43v10Ev();
extern void _ZN7S1435C43v11Ev();
extern void _ZN7S1435C43v12Ev();
extern void _ZN7S1435C43v13Ev();
extern void _ZN7S1435C43v14Ev();
extern void _ZN7S1435C43v15Ev();
extern void _ZN7S1435C43v16Ev();
extern void _ZN7S1435C43v17Ev();
extern void _ZN7S1435C43v18Ev();
extern void _ZN7S1435C43v19Ev();
extern void _ZN7S1435C43v20Ev();
extern void _ZN7S1435C43v21Ev();
extern void _ZN7S1435C43v22Ev();
extern void _ZN7S1435C43v23Ev();
extern void _ZN7S1435C43v24Ev();
extern void _ZN7S1435C43v25Ev();
extern void _ZN7S1435C43v26Ev();
extern void _ZN7S1435C43v27Ev();
extern void _ZN7S1435C43v28Ev();
extern void _ZN7S1435C43v29Ev();
extern void _ZN7S1435C43v30Ev();
extern void _ZN7S1435C43v31Ev();
extern void _ZN7S1435C43v32Ev();
extern void _ZN7S1435C43v33Ev();
extern void _ZN7S1435C43v34Ev();
extern void _ZN7S1435C43v35Ev();
extern void _ZN7S1435C43v36Ev();
extern void _ZN7S1435C43v37Ev();
extern void _ZN7S1435C43v38Ev();
extern void _ZN7S1435C43v39Ev();
extern void _ZN7S1435C43v40Ev();
extern void _ZN7S1435C43v41Ev();
extern void _ZN7S1435C43v42Ev();
extern void _ZN7S1435C43v43Ev();
extern void _ZN7S1435C43v44Ev();
extern void _ZN7S1435C43v45Ev();
extern void _ZN7S1435C43v46Ev();
extern void _ZN7S1435C43v47Ev();
extern void _ZN7S1435C43v48Ev();
extern void _ZN7S1435C43v49Ev();
extern void _ZN7S1435C43v50Ev();
extern void _ZN7S1435C43v51Ev();
extern void _ZN7S1435C43v52Ev();
extern void _ZN7S1435C43v53Ev();
extern void _ZN7S1435C43v54Ev();
extern void _ZN7S1435C43v55Ev();
extern void _ZN7S1435C43v56Ev();
extern void _ZN7S1435C43v57Ev();
extern void _ZN7S1435C43v58Ev();
extern void _ZN7S1435C43v59Ev();
extern void _ZN7S1435C43v60Ev();
extern void _ZN7S1435C43v61Ev();
extern void _ZN7S1435C43v62Ev();
extern void _ZN7S1435C43v63Ev();
extern void _ZN7S1435C43v64Ev();
extern void _ZN7S1435C43v65Ev();
extern void _ZN7S1435C43v66Ev();
extern void _ZN7S1435C43v67Ev();
extern void _ZN7S1435C33v68Ev();
extern void _ZN7S1435C33v69Ev();
extern void _ZN7S1435C33v70Ev();
extern void _ZN7S1435C33v71Ev();
extern void _ZN7S1435C33v72Ev();
extern void _ZN7S1435C33v73Ev();
extern void _ZN7S1435C33v74Ev();
extern void _ZN7S1435C33v75Ev();
extern void _ZN7S1435C33v76Ev();
extern void _ZN7S1435C33v77Ev();
extern void _ZN7S1435C33v78Ev();
extern void _ZN7S1435C33v79Ev();
extern void _ZN7S1435C33v80Ev();
extern void _ZN7S1435C23v81Ev();
extern void _ZN7S1435C23v82Ev();
extern void _ZN7S1435C23v83Ev();
extern void _ZN7S1435C23v84Ev();
extern void _ZN7S1435C23v85Ev();
extern void _ZN7S1435C23v86Ev();
extern void _ZN7S1435C23v87Ev();
extern void _ZN7S1435C23v88Ev();
extern void _ZN7S1435C23v89Ev();
extern void _ZN7S1435C23v90Ev();
extern void _ZN7S1435C23v91Ev();
static  VTBL_ENTRY vtc_S1435C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1435C2[0]),
  (VTBL_ENTRY)&_ZN7S1435C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1435C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v91Ev,
};
extern VTBL_ENTRY _ZTI7S1435C2[];
extern  VTBL_ENTRY _ZTV7S1435C2[];
Class_Descriptor cd_S1435C2 = {  "S1435C2", // class name
  bases_S1435C2, 2,
  &(vtc_S1435C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,260), // object size
  NSPAIRA(_ZTI7S1435C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1435C2),92, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1435C1  : S1435C2 {
  ::S664C12_nt s1435c1f0;
  ::S664C12_nt s1435c1f1;
  ::S664C12_nt s1435c1f2;
  int s1435c1f3[3];
  ::S632C17_nt s1435c1f4;
  virtual  ~S1435C1(); // _ZN7S1435C1D1Ev
  virtual void  v1(); // _ZN7S1435C12v1Ev
  virtual void  v2(); // _ZN7S1435C12v2Ev
  virtual void  v3(); // _ZN7S1435C12v3Ev
  S1435C1(); // tgen
};
//SIG(1 S1435C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 FC11{ m Fi[3]} Fc[4] FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi FC11 Fi[2] FC5 Fi[3] FC11 FC11 FC11 Fi} vd v1 v2 v3 FC11 FC11 FC11 Fi[3] FC12{ m Fp FC5}}


 S1435C1 ::~S1435C1(){ note_dtor("S1435C1", this);}
void  S1435C1 ::v1(){vfunc_called(this, "_ZN7S1435C12v1Ev");}
void  S1435C1 ::v2(){vfunc_called(this, "_ZN7S1435C12v2Ev");}
void  S1435C1 ::v3(){vfunc_called(this, "_ZN7S1435C12v3Ev");}
S1435C1 ::S1435C1(){ note_ctor("S1435C1", this);} // tgen

static void Test_S1435C1()
{
  extern Class_Descriptor cd_S1435C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,81)];
    init_test(&cd_S1435C1, buf);
    S1435C1 *dp, &lv = *(dp=new (buf) S1435C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,320), "sizeof(S1435C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1435C1)");
    check_base_class_offset(lv, (S1435C4*)(S1435C3*)(S1435C2*), 0, "S1435C1");
    check_base_class_offset(lv, (S1435C3*)(S1435C2*), 0, "S1435C1");
    check_base_class_offset(lv, (S1435C2*), 0, "S1435C1");
    check_field_offset(lv, s1435c1f0, ABISELECT(316,260), "S1435C1.s1435c1f0");
    check_field_offset(lv, s1435c1f1, ABISELECT(328,272), "S1435C1.s1435c1f1");
    check_field_offset(lv, s1435c1f2, ABISELECT(340,284), "S1435C1.s1435c1f2");
    check_field_offset(lv, s1435c1f3, ABISELECT(352,296), "S1435C1.s1435c1f3");
    check_field_offset(lv, s1435c1f4, ABISELECT(368,308), "S1435C1.s1435c1f4");
    test_class_info(&lv, &cd_S1435C1);
    dp->~S1435C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1435C1(Test_S1435C1, "S1435C1", ABISELECT(384,320));

#else // __cplusplus

extern void _ZN7S1435C1C1Ev();
extern void _ZN7S1435C1D1Ev();
Name_Map name_map_S1435C1[] = {
  NSPAIR(_ZN7S1435C1C1Ev),
  NSPAIR(_ZN7S1435C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1435C4;
extern VTBL_ENTRY _ZTI7S1435C4[];
extern  VTBL_ENTRY _ZTV7S1435C4[];
extern Class_Descriptor cd_S1435C3;
extern VTBL_ENTRY _ZTI7S1435C3[];
extern  VTBL_ENTRY _ZTV7S1435C3[];
extern Class_Descriptor cd_S1435C2;
extern VTBL_ENTRY _ZTI7S1435C2[];
extern  VTBL_ENTRY _ZTV7S1435C2[];
static Base_Class bases_S1435C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1435C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1435C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1435C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1435C1[];
extern void _ZN7S1435C1D1Ev();
extern void _ZN7S1435C1D0Ev();
extern void _ZN7S1435C42v4Ev();
extern void _ZN7S1435C42v5Ev();
extern void _ZN7S1435C42v6Ev();
extern void _ZN7S1435C42v7Ev();
extern void _ZN7S1435C42v8Ev();
extern void _ZN7S1435C42v9Ev();
extern void _ZN7S1435C43v10Ev();
extern void _ZN7S1435C43v11Ev();
extern void _ZN7S1435C43v12Ev();
extern void _ZN7S1435C43v13Ev();
extern void _ZN7S1435C43v14Ev();
extern void _ZN7S1435C43v15Ev();
extern void _ZN7S1435C43v16Ev();
extern void _ZN7S1435C43v17Ev();
extern void _ZN7S1435C43v18Ev();
extern void _ZN7S1435C43v19Ev();
extern void _ZN7S1435C43v20Ev();
extern void _ZN7S1435C43v21Ev();
extern void _ZN7S1435C43v22Ev();
extern void _ZN7S1435C43v23Ev();
extern void _ZN7S1435C43v24Ev();
extern void _ZN7S1435C43v25Ev();
extern void _ZN7S1435C43v26Ev();
extern void _ZN7S1435C43v27Ev();
extern void _ZN7S1435C43v28Ev();
extern void _ZN7S1435C43v29Ev();
extern void _ZN7S1435C43v30Ev();
extern void _ZN7S1435C43v31Ev();
extern void _ZN7S1435C43v32Ev();
extern void _ZN7S1435C43v33Ev();
extern void _ZN7S1435C43v34Ev();
extern void _ZN7S1435C43v35Ev();
extern void _ZN7S1435C43v36Ev();
extern void _ZN7S1435C43v37Ev();
extern void _ZN7S1435C43v38Ev();
extern void _ZN7S1435C43v39Ev();
extern void _ZN7S1435C43v40Ev();
extern void _ZN7S1435C43v41Ev();
extern void _ZN7S1435C43v42Ev();
extern void _ZN7S1435C43v43Ev();
extern void _ZN7S1435C43v44Ev();
extern void _ZN7S1435C43v45Ev();
extern void _ZN7S1435C43v46Ev();
extern void _ZN7S1435C43v47Ev();
extern void _ZN7S1435C43v48Ev();
extern void _ZN7S1435C43v49Ev();
extern void _ZN7S1435C43v50Ev();
extern void _ZN7S1435C43v51Ev();
extern void _ZN7S1435C43v52Ev();
extern void _ZN7S1435C43v53Ev();
extern void _ZN7S1435C43v54Ev();
extern void _ZN7S1435C43v55Ev();
extern void _ZN7S1435C43v56Ev();
extern void _ZN7S1435C43v57Ev();
extern void _ZN7S1435C43v58Ev();
extern void _ZN7S1435C43v59Ev();
extern void _ZN7S1435C43v60Ev();
extern void _ZN7S1435C43v61Ev();
extern void _ZN7S1435C43v62Ev();
extern void _ZN7S1435C43v63Ev();
extern void _ZN7S1435C43v64Ev();
extern void _ZN7S1435C43v65Ev();
extern void _ZN7S1435C43v66Ev();
extern void _ZN7S1435C43v67Ev();
extern void _ZN7S1435C33v68Ev();
extern void _ZN7S1435C33v69Ev();
extern void _ZN7S1435C33v70Ev();
extern void _ZN7S1435C33v71Ev();
extern void _ZN7S1435C33v72Ev();
extern void _ZN7S1435C33v73Ev();
extern void _ZN7S1435C33v74Ev();
extern void _ZN7S1435C33v75Ev();
extern void _ZN7S1435C33v76Ev();
extern void _ZN7S1435C33v77Ev();
extern void _ZN7S1435C33v78Ev();
extern void _ZN7S1435C33v79Ev();
extern void _ZN7S1435C33v80Ev();
extern void _ZN7S1435C23v81Ev();
extern void _ZN7S1435C23v82Ev();
extern void _ZN7S1435C23v83Ev();
extern void _ZN7S1435C23v84Ev();
extern void _ZN7S1435C23v85Ev();
extern void _ZN7S1435C23v86Ev();
extern void _ZN7S1435C23v87Ev();
extern void _ZN7S1435C23v88Ev();
extern void _ZN7S1435C23v89Ev();
extern void _ZN7S1435C23v90Ev();
extern void _ZN7S1435C23v91Ev();
extern void _ZN7S1435C12v1Ev();
extern void _ZN7S1435C12v2Ev();
extern void _ZN7S1435C12v3Ev();
static  VTBL_ENTRY vtc_S1435C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1435C1[0]),
  (VTBL_ENTRY)&_ZN7S1435C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1435C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1435C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1435C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1435C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1435C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1435C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1435C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1435C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1435C1[];
extern  VTBL_ENTRY _ZTV7S1435C1[];
Class_Descriptor cd_S1435C1 = {  "S1435C1", // class name
  bases_S1435C1, 3,
  &(vtc_S1435C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(384,320), // object size
  NSPAIRA(_ZTI7S1435C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1435C1),95, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1512C4  {
  int s1512c4f0;
  __tsi64 s1512c4f1;
  void *s1512c4f2[4];
  int s1512c4f3[2];
  void *s1512c4f4;
  ::S273C7_nt s1512c4f5;
  void *s1512c4f6[2];
  virtual  ~S1512C4(); // _ZN7S1512C4D1Ev
  virtual void  v6(); // _ZN7S1512C42v6Ev
  virtual void  v7(); // _ZN7S1512C42v7Ev
  virtual void  v8(); // _ZN7S1512C42v8Ev
  virtual void  v9(); // _ZN7S1512C42v9Ev
  virtual void  v10(); // _ZN7S1512C43v10Ev
  virtual void  v11(); // _ZN7S1512C43v11Ev
  virtual void  v12(); // _ZN7S1512C43v12Ev
  virtual void  v13(); // _ZN7S1512C43v13Ev
  virtual void  v14(); // _ZN7S1512C43v14Ev
  virtual void  v15(); // _ZN7S1512C43v15Ev
  virtual void  v16(); // _ZN7S1512C43v16Ev
  virtual void  v17(); // _ZN7S1512C43v17Ev
  virtual void  v18(); // _ZN7S1512C43v18Ev
  virtual void  v19(); // _ZN7S1512C43v19Ev
  virtual void  v20(); // _ZN7S1512C43v20Ev
  virtual void  v21(); // _ZN7S1512C43v21Ev
  virtual void  v22(); // _ZN7S1512C43v22Ev
  virtual void  v23(); // _ZN7S1512C43v23Ev
  virtual void  v24(); // _ZN7S1512C43v24Ev
  virtual void  v25(); // _ZN7S1512C43v25Ev
  virtual void  v26(); // _ZN7S1512C43v26Ev
  virtual void  v27(); // _ZN7S1512C43v27Ev
  virtual void  v28(); // _ZN7S1512C43v28Ev
  virtual void  v29(); // _ZN7S1512C43v29Ev
  virtual void  v30(); // _ZN7S1512C43v30Ev
  virtual void  v31(); // _ZN7S1512C43v31Ev
  virtual void  v32(); // _ZN7S1512C43v32Ev
  virtual void  v33(); // _ZN7S1512C43v33Ev
  virtual void  v34(); // _ZN7S1512C43v34Ev
  virtual void  v35(); // _ZN7S1512C43v35Ev
  virtual void  v36(); // _ZN7S1512C43v36Ev
  virtual void  v37(); // _ZN7S1512C43v37Ev
  virtual void  v38(); // _ZN7S1512C43v38Ev
  virtual void  v39(); // _ZN7S1512C43v39Ev
  virtual void  v40(); // _ZN7S1512C43v40Ev
  virtual void  v41(); // _ZN7S1512C43v41Ev
  virtual void  v42(); // _ZN7S1512C43v42Ev
  virtual void  v43(); // _ZN7S1512C43v43Ev
  virtual void  v44(); // _ZN7S1512C43v44Ev
  virtual void  v45(); // _ZN7S1512C43v45Ev
  virtual void  v46(); // _ZN7S1512C43v46Ev
  virtual void  v47(); // _ZN7S1512C43v47Ev
  virtual void  v48(); // _ZN7S1512C43v48Ev
  virtual void  v49(); // _ZN7S1512C43v49Ev
  virtual void  v50(); // _ZN7S1512C43v50Ev
  virtual void  v51(); // _ZN7S1512C43v51Ev
  virtual void  v52(); // _ZN7S1512C43v52Ev
  virtual void  v53(); // _ZN7S1512C43v53Ev
  virtual void  v54(); // _ZN7S1512C43v54Ev
  virtual void  v55(); // _ZN7S1512C43v55Ev
  virtual void  v56(); // _ZN7S1512C43v56Ev
  virtual void  v57(); // _ZN7S1512C43v57Ev
  virtual void  v58(); // _ZN7S1512C43v58Ev
  virtual void  v59(); // _ZN7S1512C43v59Ev
  virtual void  v60(); // _ZN7S1512C43v60Ev
  virtual void  v61(); // _ZN7S1512C43v61Ev
  virtual void  v62(); // _ZN7S1512C43v62Ev
  virtual void  v63(); // _ZN7S1512C43v63Ev
  virtual void  v64(); // _ZN7S1512C43v64Ev
  virtual void  v65(); // _ZN7S1512C43v65Ev
  virtual void  v66(); // _ZN7S1512C43v66Ev
  virtual void  v67(); // _ZN7S1512C43v67Ev
  virtual void  v68(); // _ZN7S1512C43v68Ev
  virtual void  v69(); // _ZN7S1512C43v69Ev
  S1512C4(); // tgen
};
//SIG(-1 S1512C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1512C4 ::~S1512C4(){ note_dtor("S1512C4", this);}
void  S1512C4 ::v6(){vfunc_called(this, "_ZN7S1512C42v6Ev");}
void  S1512C4 ::v7(){vfunc_called(this, "_ZN7S1512C42v7Ev");}
void  S1512C4 ::v8(){vfunc_called(this, "_ZN7S1512C42v8Ev");}
void  S1512C4 ::v9(){vfunc_called(this, "_ZN7S1512C42v9Ev");}
void  S1512C4 ::v10(){vfunc_called(this, "_ZN7S1512C43v10Ev");}
void  S1512C4 ::v11(){vfunc_called(this, "_ZN7S1512C43v11Ev");}
void  S1512C4 ::v12(){vfunc_called(this, "_ZN7S1512C43v12Ev");}
void  S1512C4 ::v13(){vfunc_called(this, "_ZN7S1512C43v13Ev");}
void  S1512C4 ::v14(){vfunc_called(this, "_ZN7S1512C43v14Ev");}
void  S1512C4 ::v15(){vfunc_called(this, "_ZN7S1512C43v15Ev");}
void  S1512C4 ::v16(){vfunc_called(this, "_ZN7S1512C43v16Ev");}
void  S1512C4 ::v17(){vfunc_called(this, "_ZN7S1512C43v17Ev");}
void  S1512C4 ::v18(){vfunc_called(this, "_ZN7S1512C43v18Ev");}
void  S1512C4 ::v19(){vfunc_called(this, "_ZN7S1512C43v19Ev");}
void  S1512C4 ::v20(){vfunc_called(this, "_ZN7S1512C43v20Ev");}
void  S1512C4 ::v21(){vfunc_called(this, "_ZN7S1512C43v21Ev");}
void  S1512C4 ::v22(){vfunc_called(this, "_ZN7S1512C43v22Ev");}
void  S1512C4 ::v23(){vfunc_called(this, "_ZN7S1512C43v23Ev");}
void  S1512C4 ::v24(){vfunc_called(this, "_ZN7S1512C43v24Ev");}
void  S1512C4 ::v25(){vfunc_called(this, "_ZN7S1512C43v25Ev");}
void  S1512C4 ::v26(){vfunc_called(this, "_ZN7S1512C43v26Ev");}
void  S1512C4 ::v27(){vfunc_called(this, "_ZN7S1512C43v27Ev");}
void  S1512C4 ::v28(){vfunc_called(this, "_ZN7S1512C43v28Ev");}
void  S1512C4 ::v29(){vfunc_called(this, "_ZN7S1512C43v29Ev");}
void  S1512C4 ::v30(){vfunc_called(this, "_ZN7S1512C43v30Ev");}
void  S1512C4 ::v31(){vfunc_called(this, "_ZN7S1512C43v31Ev");}
void  S1512C4 ::v32(){vfunc_called(this, "_ZN7S1512C43v32Ev");}
void  S1512C4 ::v33(){vfunc_called(this, "_ZN7S1512C43v33Ev");}
void  S1512C4 ::v34(){vfunc_called(this, "_ZN7S1512C43v34Ev");}
void  S1512C4 ::v35(){vfunc_called(this, "_ZN7S1512C43v35Ev");}
void  S1512C4 ::v36(){vfunc_called(this, "_ZN7S1512C43v36Ev");}
void  S1512C4 ::v37(){vfunc_called(this, "_ZN7S1512C43v37Ev");}
void  S1512C4 ::v38(){vfunc_called(this, "_ZN7S1512C43v38Ev");}
void  S1512C4 ::v39(){vfunc_called(this, "_ZN7S1512C43v39Ev");}
void  S1512C4 ::v40(){vfunc_called(this, "_ZN7S1512C43v40Ev");}
void  S1512C4 ::v41(){vfunc_called(this, "_ZN7S1512C43v41Ev");}
void  S1512C4 ::v42(){vfunc_called(this, "_ZN7S1512C43v42Ev");}
void  S1512C4 ::v43(){vfunc_called(this, "_ZN7S1512C43v43Ev");}
void  S1512C4 ::v44(){vfunc_called(this, "_ZN7S1512C43v44Ev");}
void  S1512C4 ::v45(){vfunc_called(this, "_ZN7S1512C43v45Ev");}
void  S1512C4 ::v46(){vfunc_called(this, "_ZN7S1512C43v46Ev");}
void  S1512C4 ::v47(){vfunc_called(this, "_ZN7S1512C43v47Ev");}
void  S1512C4 ::v48(){vfunc_called(this, "_ZN7S1512C43v48Ev");}
void  S1512C4 ::v49(){vfunc_called(this, "_ZN7S1512C43v49Ev");}
void  S1512C4 ::v50(){vfunc_called(this, "_ZN7S1512C43v50Ev");}
void  S1512C4 ::v51(){vfunc_called(this, "_ZN7S1512C43v51Ev");}
void  S1512C4 ::v52(){vfunc_called(this, "_ZN7S1512C43v52Ev");}
void  S1512C4 ::v53(){vfunc_called(this, "_ZN7S1512C43v53Ev");}
void  S1512C4 ::v54(){vfunc_called(this, "_ZN7S1512C43v54Ev");}
void  S1512C4 ::v55(){vfunc_called(this, "_ZN7S1512C43v55Ev");}
void  S1512C4 ::v56(){vfunc_called(this, "_ZN7S1512C43v56Ev");}
void  S1512C4 ::v57(){vfunc_called(this, "_ZN7S1512C43v57Ev");}
void  S1512C4 ::v58(){vfunc_called(this, "_ZN7S1512C43v58Ev");}
void  S1512C4 ::v59(){vfunc_called(this, "_ZN7S1512C43v59Ev");}
void  S1512C4 ::v60(){vfunc_called(this, "_ZN7S1512C43v60Ev");}
void  S1512C4 ::v61(){vfunc_called(this, "_ZN7S1512C43v61Ev");}
void  S1512C4 ::v62(){vfunc_called(this, "_ZN7S1512C43v62Ev");}
void  S1512C4 ::v63(){vfunc_called(this, "_ZN7S1512C43v63Ev");}
void  S1512C4 ::v64(){vfunc_called(this, "_ZN7S1512C43v64Ev");}
void  S1512C4 ::v65(){vfunc_called(this, "_ZN7S1512C43v65Ev");}
void  S1512C4 ::v66(){vfunc_called(this, "_ZN7S1512C43v66Ev");}
void  S1512C4 ::v67(){vfunc_called(this, "_ZN7S1512C43v67Ev");}
void  S1512C4 ::v68(){vfunc_called(this, "_ZN7S1512C43v68Ev");}
void  S1512C4 ::v69(){vfunc_called(this, "_ZN7S1512C43v69Ev");}
S1512C4 ::S1512C4(){ note_ctor("S1512C4", this);} // tgen

static void Test_S1512C4()
{
  extern Class_Descriptor cd_S1512C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1512C4, buf);
    S1512C4 *dp, &lv = *(dp=new (buf) S1512C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1512C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1512C4)");
    check_field_offset(lv, s1512c4f0, ABISELECT(8,4), "S1512C4.s1512c4f0");
    check_field_offset(lv, s1512c4f1, ABISELECT(16,8), "S1512C4.s1512c4f1");
    check_field_offset(lv, s1512c4f2, ABISELECT(24,16), "S1512C4.s1512c4f2");
    check_field_offset(lv, s1512c4f3, ABISELECT(56,32), "S1512C4.s1512c4f3");
    check_field_offset(lv, s1512c4f4, ABISELECT(64,40), "S1512C4.s1512c4f4");
    check_field_offset(lv, s1512c4f5, ABISELECT(72,44), "S1512C4.s1512c4f5");
    check_field_offset(lv, s1512c4f6, ABISELECT(80,52), "S1512C4.s1512c4f6");
    test_class_info(&lv, &cd_S1512C4);
    dp->~S1512C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1512C4(Test_S1512C4, "S1512C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1512C4C1Ev();
extern void _ZN7S1512C4D1Ev();
Name_Map name_map_S1512C4[] = {
  NSPAIR(_ZN7S1512C4C1Ev),
  NSPAIR(_ZN7S1512C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1512C4[];
extern void _ZN7S1512C4D1Ev();
extern void _ZN7S1512C4D0Ev();
extern void _ZN7S1512C42v6Ev();
extern void _ZN7S1512C42v7Ev();
extern void _ZN7S1512C42v8Ev();
extern void _ZN7S1512C42v9Ev();
extern void _ZN7S1512C43v10Ev();
extern void _ZN7S1512C43v11Ev();
extern void _ZN7S1512C43v12Ev();
extern void _ZN7S1512C43v13Ev();
extern void _ZN7S1512C43v14Ev();
extern void _ZN7S1512C43v15Ev();
extern void _ZN7S1512C43v16Ev();
extern void _ZN7S1512C43v17Ev();
extern void _ZN7S1512C43v18Ev();
extern void _ZN7S1512C43v19Ev();
extern void _ZN7S1512C43v20Ev();
extern void _ZN7S1512C43v21Ev();
extern void _ZN7S1512C43v22Ev();
extern void _ZN7S1512C43v23Ev();
extern void _ZN7S1512C43v24Ev();
extern void _ZN7S1512C43v25Ev();
extern void _ZN7S1512C43v26Ev();
extern void _ZN7S1512C43v27Ev();
extern void _ZN7S1512C43v28Ev();
extern void _ZN7S1512C43v29Ev();
extern void _ZN7S1512C43v30Ev();
extern void _ZN7S1512C43v31Ev();
extern void _ZN7S1512C43v32Ev();
extern void _ZN7S1512C43v33Ev();
extern void _ZN7S1512C43v34Ev();
extern void _ZN7S1512C43v35Ev();
extern void _ZN7S1512C43v36Ev();
extern void _ZN7S1512C43v37Ev();
extern void _ZN7S1512C43v38Ev();
extern void _ZN7S1512C43v39Ev();
extern void _ZN7S1512C43v40Ev();
extern void _ZN7S1512C43v41Ev();
extern void _ZN7S1512C43v42Ev();
extern void _ZN7S1512C43v43Ev();
extern void _ZN7S1512C43v44Ev();
extern void _ZN7S1512C43v45Ev();
extern void _ZN7S1512C43v46Ev();
extern void _ZN7S1512C43v47Ev();
extern void _ZN7S1512C43v48Ev();
extern void _ZN7S1512C43v49Ev();
extern void _ZN7S1512C43v50Ev();
extern void _ZN7S1512C43v51Ev();
extern void _ZN7S1512C43v52Ev();
extern void _ZN7S1512C43v53Ev();
extern void _ZN7S1512C43v54Ev();
extern void _ZN7S1512C43v55Ev();
extern void _ZN7S1512C43v56Ev();
extern void _ZN7S1512C43v57Ev();
extern void _ZN7S1512C43v58Ev();
extern void _ZN7S1512C43v59Ev();
extern void _ZN7S1512C43v60Ev();
extern void _ZN7S1512C43v61Ev();
extern void _ZN7S1512C43v62Ev();
extern void _ZN7S1512C43v63Ev();
extern void _ZN7S1512C43v64Ev();
extern void _ZN7S1512C43v65Ev();
extern void _ZN7S1512C43v66Ev();
extern void _ZN7S1512C43v67Ev();
extern void _ZN7S1512C43v68Ev();
extern void _ZN7S1512C43v69Ev();
static  VTBL_ENTRY vtc_S1512C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1512C4[0]),
  (VTBL_ENTRY)&_ZN7S1512C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1512C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v69Ev,
};
extern VTBL_ENTRY _ZTI7S1512C4[];
extern  VTBL_ENTRY _ZTV7S1512C4[];
Class_Descriptor cd_S1512C4 = {  "S1512C4", // class name
  0,0,//no base classes
  &(vtc_S1512C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1512C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1512C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1512C3  : S1512C4 {
  void *s1512c3f0;
  ::S273C7_nt s1512c3f1;
  int s1512c3f2[5];
  unsigned int s1512c3f3:1;
  unsigned int s1512c3f4:1;
  unsigned int s1512c3f5:1;
  unsigned int s1512c3f6:1;
  unsigned int s1512c3f7:1;
  ::S273C21 s1512c3f8;
  ::S273C17 s1512c3f9;
  unsigned int s1512c3f10:1;
  int s1512c3f11[2];
  void *s1512c3f12;
  int s1512c3f13[3];
  virtual  ~S1512C3(); // _ZN7S1512C3D1Ev
  virtual void  v70(); // _ZN7S1512C33v70Ev
  virtual void  v71(); // _ZN7S1512C33v71Ev
  virtual void  v72(); // _ZN7S1512C33v72Ev
  virtual void  v73(); // _ZN7S1512C33v73Ev
  virtual void  v74(); // _ZN7S1512C33v74Ev
  virtual void  v75(); // _ZN7S1512C33v75Ev
  virtual void  v76(); // _ZN7S1512C33v76Ev
  virtual void  v77(); // _ZN7S1512C33v77Ev
  virtual void  v78(); // _ZN7S1512C33v78Ev
  virtual void  v79(); // _ZN7S1512C33v79Ev
  virtual void  v80(); // _ZN7S1512C33v80Ev
  virtual void  v81(); // _ZN7S1512C33v81Ev
  virtual void  v82(); // _ZN7S1512C33v82Ev
  S1512C3(); // tgen
};
//SIG(-1 S1512C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1512C3 ::~S1512C3(){ note_dtor("S1512C3", this);}
void  S1512C3 ::v70(){vfunc_called(this, "_ZN7S1512C33v70Ev");}
void  S1512C3 ::v71(){vfunc_called(this, "_ZN7S1512C33v71Ev");}
void  S1512C3 ::v72(){vfunc_called(this, "_ZN7S1512C33v72Ev");}
void  S1512C3 ::v73(){vfunc_called(this, "_ZN7S1512C33v73Ev");}
void  S1512C3 ::v74(){vfunc_called(this, "_ZN7S1512C33v74Ev");}
void  S1512C3 ::v75(){vfunc_called(this, "_ZN7S1512C33v75Ev");}
void  S1512C3 ::v76(){vfunc_called(this, "_ZN7S1512C33v76Ev");}
void  S1512C3 ::v77(){vfunc_called(this, "_ZN7S1512C33v77Ev");}
void  S1512C3 ::v78(){vfunc_called(this, "_ZN7S1512C33v78Ev");}
void  S1512C3 ::v79(){vfunc_called(this, "_ZN7S1512C33v79Ev");}
void  S1512C3 ::v80(){vfunc_called(this, "_ZN7S1512C33v80Ev");}
void  S1512C3 ::v81(){vfunc_called(this, "_ZN7S1512C33v81Ev");}
void  S1512C3 ::v82(){vfunc_called(this, "_ZN7S1512C33v82Ev");}
S1512C3 ::S1512C3(){ note_ctor("S1512C3", this);} // tgen

static void Test_S1512C3()
{
  extern Class_Descriptor cd_S1512C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1512C3, buf);
    S1512C3 *dp, &lv = *(dp=new (buf) S1512C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1512C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1512C3)");
    check_base_class_offset(lv, (S1512C4*), 0, "S1512C3");
    check_field_offset(lv, s1512c3f0, ABISELECT(96,60), "S1512C3.s1512c3f0");
    check_field_offset(lv, s1512c3f1, ABISELECT(104,64), "S1512C3.s1512c3f1");
    check_field_offset(lv, s1512c3f2, ABISELECT(112,72), "S1512C3.s1512c3f2");
    set_bf_and_test(lv, s1512c3f3, ABISELECT(132,92), 0, 1, 1, "S1512C3");
    set_bf_and_test(lv, s1512c3f4, ABISELECT(132,92), 1, 1, 1, "S1512C3");
    set_bf_and_test(lv, s1512c3f5, ABISELECT(132,92), 2, 1, 1, "S1512C3");
    set_bf_and_test(lv, s1512c3f6, ABISELECT(132,92), 3, 1, 1, "S1512C3");
    set_bf_and_test(lv, s1512c3f7, ABISELECT(132,92), 4, 1, 1, "S1512C3");
    check_field_offset(lv, s1512c3f8, ABISELECT(136,96), "S1512C3.s1512c3f8");
    check_field_offset(lv, s1512c3f9, ABISELECT(152,108), "S1512C3.s1512c3f9");
    set_bf_and_test(lv, s1512c3f10, ABISELECT(168,120), 0, 1, 1, "S1512C3");
    check_field_offset(lv, s1512c3f11, ABISELECT(172,124), "S1512C3.s1512c3f11");
    check_field_offset(lv, s1512c3f12, ABISELECT(184,132), "S1512C3.s1512c3f12");
    check_field_offset(lv, s1512c3f13, ABISELECT(192,136), "S1512C3.s1512c3f13");
    test_class_info(&lv, &cd_S1512C3);
    dp->~S1512C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1512C3(Test_S1512C3, "S1512C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1512C3C1Ev();
extern void _ZN7S1512C3D1Ev();
Name_Map name_map_S1512C3[] = {
  NSPAIR(_ZN7S1512C3C1Ev),
  NSPAIR(_ZN7S1512C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1512C4;
extern VTBL_ENTRY _ZTI7S1512C4[];
extern  VTBL_ENTRY _ZTV7S1512C4[];
static Base_Class bases_S1512C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1512C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1512C3[];
extern void _ZN7S1512C3D1Ev();
extern void _ZN7S1512C3D0Ev();
extern void _ZN7S1512C42v6Ev();
extern void _ZN7S1512C42v7Ev();
extern void _ZN7S1512C42v8Ev();
extern void _ZN7S1512C42v9Ev();
extern void _ZN7S1512C43v10Ev();
extern void _ZN7S1512C43v11Ev();
extern void _ZN7S1512C43v12Ev();
extern void _ZN7S1512C43v13Ev();
extern void _ZN7S1512C43v14Ev();
extern void _ZN7S1512C43v15Ev();
extern void _ZN7S1512C43v16Ev();
extern void _ZN7S1512C43v17Ev();
extern void _ZN7S1512C43v18Ev();
extern void _ZN7S1512C43v19Ev();
extern void _ZN7S1512C43v20Ev();
extern void _ZN7S1512C43v21Ev();
extern void _ZN7S1512C43v22Ev();
extern void _ZN7S1512C43v23Ev();
extern void _ZN7S1512C43v24Ev();
extern void _ZN7S1512C43v25Ev();
extern void _ZN7S1512C43v26Ev();
extern void _ZN7S1512C43v27Ev();
extern void _ZN7S1512C43v28Ev();
extern void _ZN7S1512C43v29Ev();
extern void _ZN7S1512C43v30Ev();
extern void _ZN7S1512C43v31Ev();
extern void _ZN7S1512C43v32Ev();
extern void _ZN7S1512C43v33Ev();
extern void _ZN7S1512C43v34Ev();
extern void _ZN7S1512C43v35Ev();
extern void _ZN7S1512C43v36Ev();
extern void _ZN7S1512C43v37Ev();
extern void _ZN7S1512C43v38Ev();
extern void _ZN7S1512C43v39Ev();
extern void _ZN7S1512C43v40Ev();
extern void _ZN7S1512C43v41Ev();
extern void _ZN7S1512C43v42Ev();
extern void _ZN7S1512C43v43Ev();
extern void _ZN7S1512C43v44Ev();
extern void _ZN7S1512C43v45Ev();
extern void _ZN7S1512C43v46Ev();
extern void _ZN7S1512C43v47Ev();
extern void _ZN7S1512C43v48Ev();
extern void _ZN7S1512C43v49Ev();
extern void _ZN7S1512C43v50Ev();
extern void _ZN7S1512C43v51Ev();
extern void _ZN7S1512C43v52Ev();
extern void _ZN7S1512C43v53Ev();
extern void _ZN7S1512C43v54Ev();
extern void _ZN7S1512C43v55Ev();
extern void _ZN7S1512C43v56Ev();
extern void _ZN7S1512C43v57Ev();
extern void _ZN7S1512C43v58Ev();
extern void _ZN7S1512C43v59Ev();
extern void _ZN7S1512C43v60Ev();
extern void _ZN7S1512C43v61Ev();
extern void _ZN7S1512C43v62Ev();
extern void _ZN7S1512C43v63Ev();
extern void _ZN7S1512C43v64Ev();
extern void _ZN7S1512C43v65Ev();
extern void _ZN7S1512C43v66Ev();
extern void _ZN7S1512C43v67Ev();
extern void _ZN7S1512C43v68Ev();
extern void _ZN7S1512C43v69Ev();
extern void _ZN7S1512C33v70Ev();
extern void _ZN7S1512C33v71Ev();
extern void _ZN7S1512C33v72Ev();
extern void _ZN7S1512C33v73Ev();
extern void _ZN7S1512C33v74Ev();
extern void _ZN7S1512C33v75Ev();
extern void _ZN7S1512C33v76Ev();
extern void _ZN7S1512C33v77Ev();
extern void _ZN7S1512C33v78Ev();
extern void _ZN7S1512C33v79Ev();
extern void _ZN7S1512C33v80Ev();
extern void _ZN7S1512C33v81Ev();
extern void _ZN7S1512C33v82Ev();
static  VTBL_ENTRY vtc_S1512C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1512C3[0]),
  (VTBL_ENTRY)&_ZN7S1512C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1512C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v82Ev,
};
extern VTBL_ENTRY _ZTI7S1512C3[];
extern  VTBL_ENTRY _ZTV7S1512C3[];
Class_Descriptor cd_S1512C3 = {  "S1512C3", // class name
  bases_S1512C3, 1,
  &(vtc_S1512C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1512C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1512C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1512C2  : S1512C3 {
  ::S664C12_nt s1512c2f0;
  char s1512c2f1[4];
  ::S273C7_nt s1512c2f2;
  unsigned int s1512c2f3:1;
  unsigned int s1512c2f4:1;
  unsigned int s1512c2f5:1;
  unsigned int s1512c2f6:1;
  unsigned int s1512c2f7:1;
  unsigned int s1512c2f8:1;
  unsigned int s1512c2f9:1;
  unsigned int s1512c2f10:1;
  unsigned int s1512c2f11:1;
  unsigned int s1512c2f12:1;
  unsigned int s1512c2f13:1;
  int s1512c2f14;
  ::S664C12_nt s1512c2f15;
  int s1512c2f16[2];
  ::S273C7_nt s1512c2f17;
  int s1512c2f18[3];
  ::S664C12_nt s1512c2f19;
  ::S664C12_nt s1512c2f20;
  ::S664C12_nt s1512c2f21;
  int s1512c2f22;
  virtual  ~S1512C2(); // _ZN7S1512C2D1Ev
  virtual void  v83(); // _ZN7S1512C23v83Ev
  virtual void  v84(); // _ZN7S1512C23v84Ev
  virtual void  v85(); // _ZN7S1512C23v85Ev
  virtual void  v86(); // _ZN7S1512C23v86Ev
  virtual void  v87(); // _ZN7S1512C23v87Ev
  virtual void  v88(); // _ZN7S1512C23v88Ev
  virtual void  v89(); // _ZN7S1512C23v89Ev
  virtual void  v90(); // _ZN7S1512C23v90Ev
  virtual void  v91(); // _ZN7S1512C23v91Ev
  virtual void  v92(); // _ZN7S1512C23v92Ev
  virtual void  v93(); // _ZN7S1512C23v93Ev
  S1512C2(); // tgen
};
//SIG(-1 S1512C2) C1{ BC2{ BC3{ vd v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC10{ m Fi[3]} Fc[4] FC4 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi FC10 Fi[2] FC4 Fi[3] FC10 FC10 FC10 Fi}


 S1512C2 ::~S1512C2(){ note_dtor("S1512C2", this);}
void  S1512C2 ::v83(){vfunc_called(this, "_ZN7S1512C23v83Ev");}
void  S1512C2 ::v84(){vfunc_called(this, "_ZN7S1512C23v84Ev");}
void  S1512C2 ::v85(){vfunc_called(this, "_ZN7S1512C23v85Ev");}
void  S1512C2 ::v86(){vfunc_called(this, "_ZN7S1512C23v86Ev");}
void  S1512C2 ::v87(){vfunc_called(this, "_ZN7S1512C23v87Ev");}
void  S1512C2 ::v88(){vfunc_called(this, "_ZN7S1512C23v88Ev");}
void  S1512C2 ::v89(){vfunc_called(this, "_ZN7S1512C23v89Ev");}
void  S1512C2 ::v90(){vfunc_called(this, "_ZN7S1512C23v90Ev");}
void  S1512C2 ::v91(){vfunc_called(this, "_ZN7S1512C23v91Ev");}
void  S1512C2 ::v92(){vfunc_called(this, "_ZN7S1512C23v92Ev");}
void  S1512C2 ::v93(){vfunc_called(this, "_ZN7S1512C23v93Ev");}
S1512C2 ::S1512C2(){ note_ctor("S1512C2", this);} // tgen

static void Test_S1512C2()
{
  extern Class_Descriptor cd_S1512C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(41,66)];
    init_test(&cd_S1512C2, buf);
    S1512C2 *dp, &lv = *(dp=new (buf) S1512C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(320,260), "sizeof(S1512C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1512C2)");
    check_base_class_offset(lv, (S1512C4*)(S1512C3*), 0, "S1512C2");
    check_base_class_offset(lv, (S1512C3*), 0, "S1512C2");
    check_field_offset(lv, s1512c2f0, ABISELECT(204,148), "S1512C2.s1512c2f0");
    check_field_offset(lv, s1512c2f1, ABISELECT(216,160), "S1512C2.s1512c2f1");
    check_field_offset(lv, s1512c2f2, ABISELECT(220,164), "S1512C2.s1512c2f2");
    set_bf_and_test(lv, s1512c2f3, ABISELECT(228,172), 0, 1, 1, "S1512C2");
    set_bf_and_test(lv, s1512c2f4, ABISELECT(228,172), 1, 1, 1, "S1512C2");
    set_bf_and_test(lv, s1512c2f5, ABISELECT(228,172), 2, 1, 1, "S1512C2");
    set_bf_and_test(lv, s1512c2f6, ABISELECT(228,172), 3, 1, 1, "S1512C2");
    set_bf_and_test(lv, s1512c2f7, ABISELECT(228,172), 4, 1, 1, "S1512C2");
    set_bf_and_test(lv, s1512c2f8, ABISELECT(228,172), 5, 1, 1, "S1512C2");
    set_bf_and_test(lv, s1512c2f9, ABISELECT(228,172), 6, 1, 1, "S1512C2");
    set_bf_and_test(lv, s1512c2f10, ABISELECT(228,172), 7, 1, 1, "S1512C2");
    set_bf_and_test(lv, s1512c2f11, ABISELECT(229,173), 0, 1, 1, "S1512C2");
    set_bf_and_test(lv, s1512c2f12, ABISELECT(229,173), 1, 1, 1, "S1512C2");
    set_bf_and_test(lv, s1512c2f13, ABISELECT(229,173), 2, 1, 1, "S1512C2");
    check_field_offset(lv, s1512c2f14, ABISELECT(232,176), "S1512C2.s1512c2f14");
    check_field_offset(lv, s1512c2f15, ABISELECT(236,180), "S1512C2.s1512c2f15");
    check_field_offset(lv, s1512c2f16, ABISELECT(248,192), "S1512C2.s1512c2f16");
    check_field_offset(lv, s1512c2f17, ABISELECT(256,200), "S1512C2.s1512c2f17");
    check_field_offset(lv, s1512c2f18, ABISELECT(264,208), "S1512C2.s1512c2f18");
    check_field_offset(lv, s1512c2f19, ABISELECT(276,220), "S1512C2.s1512c2f19");
    check_field_offset(lv, s1512c2f20, ABISELECT(288,232), "S1512C2.s1512c2f20");
    check_field_offset(lv, s1512c2f21, ABISELECT(300,244), "S1512C2.s1512c2f21");
    check_field_offset(lv, s1512c2f22, ABISELECT(312,256), "S1512C2.s1512c2f22");
    test_class_info(&lv, &cd_S1512C2);
    dp->~S1512C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1512C2(Test_S1512C2, "S1512C2", ABISELECT(320,260));

#else // __cplusplus

extern void _ZN7S1512C2C1Ev();
extern void _ZN7S1512C2D1Ev();
Name_Map name_map_S1512C2[] = {
  NSPAIR(_ZN7S1512C2C1Ev),
  NSPAIR(_ZN7S1512C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1512C4;
extern VTBL_ENTRY _ZTI7S1512C4[];
extern  VTBL_ENTRY _ZTV7S1512C4[];
extern Class_Descriptor cd_S1512C3;
extern VTBL_ENTRY _ZTI7S1512C3[];
extern  VTBL_ENTRY _ZTV7S1512C3[];
static Base_Class bases_S1512C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1512C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1512C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1512C2[];
extern void _ZN7S1512C2D1Ev();
extern void _ZN7S1512C2D0Ev();
extern void _ZN7S1512C42v6Ev();
extern void _ZN7S1512C42v7Ev();
extern void _ZN7S1512C42v8Ev();
extern void _ZN7S1512C42v9Ev();
extern void _ZN7S1512C43v10Ev();
extern void _ZN7S1512C43v11Ev();
extern void _ZN7S1512C43v12Ev();
extern void _ZN7S1512C43v13Ev();
extern void _ZN7S1512C43v14Ev();
extern void _ZN7S1512C43v15Ev();
extern void _ZN7S1512C43v16Ev();
extern void _ZN7S1512C43v17Ev();
extern void _ZN7S1512C43v18Ev();
extern void _ZN7S1512C43v19Ev();
extern void _ZN7S1512C43v20Ev();
extern void _ZN7S1512C43v21Ev();
extern void _ZN7S1512C43v22Ev();
extern void _ZN7S1512C43v23Ev();
extern void _ZN7S1512C43v24Ev();
extern void _ZN7S1512C43v25Ev();
extern void _ZN7S1512C43v26Ev();
extern void _ZN7S1512C43v27Ev();
extern void _ZN7S1512C43v28Ev();
extern void _ZN7S1512C43v29Ev();
extern void _ZN7S1512C43v30Ev();
extern void _ZN7S1512C43v31Ev();
extern void _ZN7S1512C43v32Ev();
extern void _ZN7S1512C43v33Ev();
extern void _ZN7S1512C43v34Ev();
extern void _ZN7S1512C43v35Ev();
extern void _ZN7S1512C43v36Ev();
extern void _ZN7S1512C43v37Ev();
extern void _ZN7S1512C43v38Ev();
extern void _ZN7S1512C43v39Ev();
extern void _ZN7S1512C43v40Ev();
extern void _ZN7S1512C43v41Ev();
extern void _ZN7S1512C43v42Ev();
extern void _ZN7S1512C43v43Ev();
extern void _ZN7S1512C43v44Ev();
extern void _ZN7S1512C43v45Ev();
extern void _ZN7S1512C43v46Ev();
extern void _ZN7S1512C43v47Ev();
extern void _ZN7S1512C43v48Ev();
extern void _ZN7S1512C43v49Ev();
extern void _ZN7S1512C43v50Ev();
extern void _ZN7S1512C43v51Ev();
extern void _ZN7S1512C43v52Ev();
extern void _ZN7S1512C43v53Ev();
extern void _ZN7S1512C43v54Ev();
extern void _ZN7S1512C43v55Ev();
extern void _ZN7S1512C43v56Ev();
extern void _ZN7S1512C43v57Ev();
extern void _ZN7S1512C43v58Ev();
extern void _ZN7S1512C43v59Ev();
extern void _ZN7S1512C43v60Ev();
extern void _ZN7S1512C43v61Ev();
extern void _ZN7S1512C43v62Ev();
extern void _ZN7S1512C43v63Ev();
extern void _ZN7S1512C43v64Ev();
extern void _ZN7S1512C43v65Ev();
extern void _ZN7S1512C43v66Ev();
extern void _ZN7S1512C43v67Ev();
extern void _ZN7S1512C43v68Ev();
extern void _ZN7S1512C43v69Ev();
extern void _ZN7S1512C33v70Ev();
extern void _ZN7S1512C33v71Ev();
extern void _ZN7S1512C33v72Ev();
extern void _ZN7S1512C33v73Ev();
extern void _ZN7S1512C33v74Ev();
extern void _ZN7S1512C33v75Ev();
extern void _ZN7S1512C33v76Ev();
extern void _ZN7S1512C33v77Ev();
extern void _ZN7S1512C33v78Ev();
extern void _ZN7S1512C33v79Ev();
extern void _ZN7S1512C33v80Ev();
extern void _ZN7S1512C33v81Ev();
extern void _ZN7S1512C33v82Ev();
extern void _ZN7S1512C23v83Ev();
extern void _ZN7S1512C23v84Ev();
extern void _ZN7S1512C23v85Ev();
extern void _ZN7S1512C23v86Ev();
extern void _ZN7S1512C23v87Ev();
extern void _ZN7S1512C23v88Ev();
extern void _ZN7S1512C23v89Ev();
extern void _ZN7S1512C23v90Ev();
extern void _ZN7S1512C23v91Ev();
extern void _ZN7S1512C23v92Ev();
extern void _ZN7S1512C23v93Ev();
static  VTBL_ENTRY vtc_S1512C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1512C2[0]),
  (VTBL_ENTRY)&_ZN7S1512C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1512C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v93Ev,
};
extern VTBL_ENTRY _ZTI7S1512C2[];
extern  VTBL_ENTRY _ZTV7S1512C2[];
Class_Descriptor cd_S1512C2 = {  "S1512C2", // class name
  bases_S1512C2, 2,
  &(vtc_S1512C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(320,260), // object size
  NSPAIRA(_ZTI7S1512C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1512C2),92, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1512C1  : S1512C2 {
  unsigned int s1512c1f0:1;
  unsigned int s1512c1f1:1;
  unsigned int s1512c1f2:1;
  unsigned int s1512c1f3:1;
  int s1512c1f4[3];
  virtual  ~S1512C1(); // _ZN7S1512C1D1Ev
  virtual void  v1(); // _ZN7S1512C12v1Ev
  virtual void  v2(); // _ZN7S1512C12v2Ev
  virtual void  v3(); // _ZN7S1512C12v3Ev
  virtual void  v4(); // _ZN7S1512C12v4Ev
  virtual void  v5(); // _ZN7S1512C12v5Ev
  S1512C1(); // tgen
};
//SIG(1 S1512C1) C1{ BC2{ BC3{ BC4{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 v93 FC11{ m Fi[3]} Fc[4] FC5 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi FC11 Fi[2] FC5 Fi[3] FC11 FC11 FC11 Fi} vd v1 v2 v3 v4 v5 Fi:1 Fi:1 Fi:1 Fi:1 Fi[3]}


 S1512C1 ::~S1512C1(){ note_dtor("S1512C1", this);}
void  S1512C1 ::v1(){vfunc_called(this, "_ZN7S1512C12v1Ev");}
void  S1512C1 ::v2(){vfunc_called(this, "_ZN7S1512C12v2Ev");}
void  S1512C1 ::v3(){vfunc_called(this, "_ZN7S1512C12v3Ev");}
void  S1512C1 ::v4(){vfunc_called(this, "_ZN7S1512C12v4Ev");}
void  S1512C1 ::v5(){vfunc_called(this, "_ZN7S1512C12v5Ev");}
S1512C1 ::S1512C1(){ note_ctor("S1512C1", this);} // tgen

static void Test_S1512C1()
{
  extern Class_Descriptor cd_S1512C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,70)];
    init_test(&cd_S1512C1, buf);
    S1512C1 *dp, &lv = *(dp=new (buf) S1512C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,276), "sizeof(S1512C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1512C1)");
    check_base_class_offset(lv, (S1512C4*)(S1512C3*)(S1512C2*), 0, "S1512C1");
    check_base_class_offset(lv, (S1512C3*)(S1512C2*), 0, "S1512C1");
    check_base_class_offset(lv, (S1512C2*), 0, "S1512C1");
    set_bf_and_test(lv, s1512c1f0, ABISELECT(316,260), 0, 1, 1, "S1512C1");
    set_bf_and_test(lv, s1512c1f1, ABISELECT(316,260), 1, 1, 1, "S1512C1");
    set_bf_and_test(lv, s1512c1f2, ABISELECT(316,260), 2, 1, 1, "S1512C1");
    set_bf_and_test(lv, s1512c1f3, ABISELECT(316,260), 3, 1, 1, "S1512C1");
    check_field_offset(lv, s1512c1f4, ABISELECT(320,264), "S1512C1.s1512c1f4");
    test_class_info(&lv, &cd_S1512C1);
    dp->~S1512C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1512C1(Test_S1512C1, "S1512C1", ABISELECT(336,276));

#else // __cplusplus

extern void _ZN7S1512C1C1Ev();
extern void _ZN7S1512C1D1Ev();
Name_Map name_map_S1512C1[] = {
  NSPAIR(_ZN7S1512C1C1Ev),
  NSPAIR(_ZN7S1512C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1512C4;
extern VTBL_ENTRY _ZTI7S1512C4[];
extern  VTBL_ENTRY _ZTV7S1512C4[];
extern Class_Descriptor cd_S1512C3;
extern VTBL_ENTRY _ZTI7S1512C3[];
extern  VTBL_ENTRY _ZTV7S1512C3[];
extern Class_Descriptor cd_S1512C2;
extern VTBL_ENTRY _ZTI7S1512C2[];
extern  VTBL_ENTRY _ZTV7S1512C2[];
static Base_Class bases_S1512C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1512C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1512C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1512C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1512C1[];
extern void _ZN7S1512C1D1Ev();
extern void _ZN7S1512C1D0Ev();
extern void _ZN7S1512C42v6Ev();
extern void _ZN7S1512C42v7Ev();
extern void _ZN7S1512C42v8Ev();
extern void _ZN7S1512C42v9Ev();
extern void _ZN7S1512C43v10Ev();
extern void _ZN7S1512C43v11Ev();
extern void _ZN7S1512C43v12Ev();
extern void _ZN7S1512C43v13Ev();
extern void _ZN7S1512C43v14Ev();
extern void _ZN7S1512C43v15Ev();
extern void _ZN7S1512C43v16Ev();
extern void _ZN7S1512C43v17Ev();
extern void _ZN7S1512C43v18Ev();
extern void _ZN7S1512C43v19Ev();
extern void _ZN7S1512C43v20Ev();
extern void _ZN7S1512C43v21Ev();
extern void _ZN7S1512C43v22Ev();
extern void _ZN7S1512C43v23Ev();
extern void _ZN7S1512C43v24Ev();
extern void _ZN7S1512C43v25Ev();
extern void _ZN7S1512C43v26Ev();
extern void _ZN7S1512C43v27Ev();
extern void _ZN7S1512C43v28Ev();
extern void _ZN7S1512C43v29Ev();
extern void _ZN7S1512C43v30Ev();
extern void _ZN7S1512C43v31Ev();
extern void _ZN7S1512C43v32Ev();
extern void _ZN7S1512C43v33Ev();
extern void _ZN7S1512C43v34Ev();
extern void _ZN7S1512C43v35Ev();
extern void _ZN7S1512C43v36Ev();
extern void _ZN7S1512C43v37Ev();
extern void _ZN7S1512C43v38Ev();
extern void _ZN7S1512C43v39Ev();
extern void _ZN7S1512C43v40Ev();
extern void _ZN7S1512C43v41Ev();
extern void _ZN7S1512C43v42Ev();
extern void _ZN7S1512C43v43Ev();
extern void _ZN7S1512C43v44Ev();
extern void _ZN7S1512C43v45Ev();
extern void _ZN7S1512C43v46Ev();
extern void _ZN7S1512C43v47Ev();
extern void _ZN7S1512C43v48Ev();
extern void _ZN7S1512C43v49Ev();
extern void _ZN7S1512C43v50Ev();
extern void _ZN7S1512C43v51Ev();
extern void _ZN7S1512C43v52Ev();
extern void _ZN7S1512C43v53Ev();
extern void _ZN7S1512C43v54Ev();
extern void _ZN7S1512C43v55Ev();
extern void _ZN7S1512C43v56Ev();
extern void _ZN7S1512C43v57Ev();
extern void _ZN7S1512C43v58Ev();
extern void _ZN7S1512C43v59Ev();
extern void _ZN7S1512C43v60Ev();
extern void _ZN7S1512C43v61Ev();
extern void _ZN7S1512C43v62Ev();
extern void _ZN7S1512C43v63Ev();
extern void _ZN7S1512C43v64Ev();
extern void _ZN7S1512C43v65Ev();
extern void _ZN7S1512C43v66Ev();
extern void _ZN7S1512C43v67Ev();
extern void _ZN7S1512C43v68Ev();
extern void _ZN7S1512C43v69Ev();
extern void _ZN7S1512C33v70Ev();
extern void _ZN7S1512C33v71Ev();
extern void _ZN7S1512C33v72Ev();
extern void _ZN7S1512C33v73Ev();
extern void _ZN7S1512C33v74Ev();
extern void _ZN7S1512C33v75Ev();
extern void _ZN7S1512C33v76Ev();
extern void _ZN7S1512C33v77Ev();
extern void _ZN7S1512C33v78Ev();
extern void _ZN7S1512C33v79Ev();
extern void _ZN7S1512C33v80Ev();
extern void _ZN7S1512C33v81Ev();
extern void _ZN7S1512C33v82Ev();
extern void _ZN7S1512C23v83Ev();
extern void _ZN7S1512C23v84Ev();
extern void _ZN7S1512C23v85Ev();
extern void _ZN7S1512C23v86Ev();
extern void _ZN7S1512C23v87Ev();
extern void _ZN7S1512C23v88Ev();
extern void _ZN7S1512C23v89Ev();
extern void _ZN7S1512C23v90Ev();
extern void _ZN7S1512C23v91Ev();
extern void _ZN7S1512C23v92Ev();
extern void _ZN7S1512C23v93Ev();
extern void _ZN7S1512C12v1Ev();
extern void _ZN7S1512C12v2Ev();
extern void _ZN7S1512C12v3Ev();
extern void _ZN7S1512C12v4Ev();
extern void _ZN7S1512C12v5Ev();
static  VTBL_ENTRY vtc_S1512C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1512C1[0]),
  (VTBL_ENTRY)&_ZN7S1512C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1512C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1512C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1512C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1512C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1512C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1512C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1512C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1512C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1512C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1512C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S1512C1[];
extern  VTBL_ENTRY _ZTV7S1512C1[];
Class_Descriptor cd_S1512C1 = {  "S1512C1", // class name
  bases_S1512C1, 3,
  &(vtc_S1512C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,276), // object size
  NSPAIRA(_ZTI7S1512C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1512C1),97, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1548C4  {
  int s1548c4f0;
  __tsi64 s1548c4f1;
  void *s1548c4f2[4];
  int s1548c4f3[2];
  void *s1548c4f4;
  ::S273C7_nt s1548c4f5;
  void *s1548c4f6[2];
  virtual  ~S1548C4(); // _ZN7S1548C4D1Ev
  virtual void  v7(); // _ZN7S1548C42v7Ev
  virtual void  v8(); // _ZN7S1548C42v8Ev
  virtual void  v9(); // _ZN7S1548C42v9Ev
  virtual void  v10(); // _ZN7S1548C43v10Ev
  virtual void  v11(); // _ZN7S1548C43v11Ev
  virtual void  v12(); // _ZN7S1548C43v12Ev
  virtual void  v13(); // _ZN7S1548C43v13Ev
  virtual void  v14(); // _ZN7S1548C43v14Ev
  virtual void  v15(); // _ZN7S1548C43v15Ev
  virtual void  v16(); // _ZN7S1548C43v16Ev
  virtual void  v17(); // _ZN7S1548C43v17Ev
  virtual void  v18(); // _ZN7S1548C43v18Ev
  virtual void  v19(); // _ZN7S1548C43v19Ev
  virtual void  v20(); // _ZN7S1548C43v20Ev
  virtual void  v21(); // _ZN7S1548C43v21Ev
  virtual void  v22(); // _ZN7S1548C43v22Ev
  virtual void  v23(); // _ZN7S1548C43v23Ev
  virtual void  v24(); // _ZN7S1548C43v24Ev
  virtual void  v25(); // _ZN7S1548C43v25Ev
  virtual void  v26(); // _ZN7S1548C43v26Ev
  virtual void  v27(); // _ZN7S1548C43v27Ev
  virtual void  v28(); // _ZN7S1548C43v28Ev
  virtual void  v29(); // _ZN7S1548C43v29Ev
  virtual void  v30(); // _ZN7S1548C43v30Ev
  virtual void  v31(); // _ZN7S1548C43v31Ev
  virtual void  v32(); // _ZN7S1548C43v32Ev
  virtual void  v33(); // _ZN7S1548C43v33Ev
  virtual void  v34(); // _ZN7S1548C43v34Ev
  virtual void  v35(); // _ZN7S1548C43v35Ev
  virtual void  v36(); // _ZN7S1548C43v36Ev
  virtual void  v37(); // _ZN7S1548C43v37Ev
  virtual void  v38(); // _ZN7S1548C43v38Ev
  virtual void  v39(); // _ZN7S1548C43v39Ev
  virtual void  v40(); // _ZN7S1548C43v40Ev
  virtual void  v41(); // _ZN7S1548C43v41Ev
  virtual void  v42(); // _ZN7S1548C43v42Ev
  virtual void  v43(); // _ZN7S1548C43v43Ev
  virtual void  v44(); // _ZN7S1548C43v44Ev
  virtual void  v45(); // _ZN7S1548C43v45Ev
  virtual void  v46(); // _ZN7S1548C43v46Ev
  virtual void  v47(); // _ZN7S1548C43v47Ev
  virtual void  v48(); // _ZN7S1548C43v48Ev
  virtual void  v49(); // _ZN7S1548C43v49Ev
  virtual void  v50(); // _ZN7S1548C43v50Ev
  virtual void  v51(); // _ZN7S1548C43v51Ev
  virtual void  v52(); // _ZN7S1548C43v52Ev
  virtual void  v53(); // _ZN7S1548C43v53Ev
  virtual void  v54(); // _ZN7S1548C43v54Ev
  virtual void  v55(); // _ZN7S1548C43v55Ev
  virtual void  v56(); // _ZN7S1548C43v56Ev
  virtual void  v57(); // _ZN7S1548C43v57Ev
  virtual void  v58(); // _ZN7S1548C43v58Ev
  virtual void  v59(); // _ZN7S1548C43v59Ev
  virtual void  v60(); // _ZN7S1548C43v60Ev
  virtual void  v61(); // _ZN7S1548C43v61Ev
  virtual void  v62(); // _ZN7S1548C43v62Ev
  virtual void  v63(); // _ZN7S1548C43v63Ev
  virtual void  v64(); // _ZN7S1548C43v64Ev
  virtual void  v65(); // _ZN7S1548C43v65Ev
  virtual void  v66(); // _ZN7S1548C43v66Ev
  virtual void  v67(); // _ZN7S1548C43v67Ev
  virtual void  v68(); // _ZN7S1548C43v68Ev
  virtual void  v69(); // _ZN7S1548C43v69Ev
  virtual void  v70(); // _ZN7S1548C43v70Ev
  S1548C4(); // tgen
};
//SIG(-1 S1548C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1548C4 ::~S1548C4(){ note_dtor("S1548C4", this);}
void  S1548C4 ::v7(){vfunc_called(this, "_ZN7S1548C42v7Ev");}
void  S1548C4 ::v8(){vfunc_called(this, "_ZN7S1548C42v8Ev");}
void  S1548C4 ::v9(){vfunc_called(this, "_ZN7S1548C42v9Ev");}
void  S1548C4 ::v10(){vfunc_called(this, "_ZN7S1548C43v10Ev");}
void  S1548C4 ::v11(){vfunc_called(this, "_ZN7S1548C43v11Ev");}
void  S1548C4 ::v12(){vfunc_called(this, "_ZN7S1548C43v12Ev");}
void  S1548C4 ::v13(){vfunc_called(this, "_ZN7S1548C43v13Ev");}
void  S1548C4 ::v14(){vfunc_called(this, "_ZN7S1548C43v14Ev");}
void  S1548C4 ::v15(){vfunc_called(this, "_ZN7S1548C43v15Ev");}
void  S1548C4 ::v16(){vfunc_called(this, "_ZN7S1548C43v16Ev");}
void  S1548C4 ::v17(){vfunc_called(this, "_ZN7S1548C43v17Ev");}
void  S1548C4 ::v18(){vfunc_called(this, "_ZN7S1548C43v18Ev");}
void  S1548C4 ::v19(){vfunc_called(this, "_ZN7S1548C43v19Ev");}
void  S1548C4 ::v20(){vfunc_called(this, "_ZN7S1548C43v20Ev");}
void  S1548C4 ::v21(){vfunc_called(this, "_ZN7S1548C43v21Ev");}
void  S1548C4 ::v22(){vfunc_called(this, "_ZN7S1548C43v22Ev");}
void  S1548C4 ::v23(){vfunc_called(this, "_ZN7S1548C43v23Ev");}
void  S1548C4 ::v24(){vfunc_called(this, "_ZN7S1548C43v24Ev");}
void  S1548C4 ::v25(){vfunc_called(this, "_ZN7S1548C43v25Ev");}
void  S1548C4 ::v26(){vfunc_called(this, "_ZN7S1548C43v26Ev");}
void  S1548C4 ::v27(){vfunc_called(this, "_ZN7S1548C43v27Ev");}
void  S1548C4 ::v28(){vfunc_called(this, "_ZN7S1548C43v28Ev");}
void  S1548C4 ::v29(){vfunc_called(this, "_ZN7S1548C43v29Ev");}
void  S1548C4 ::v30(){vfunc_called(this, "_ZN7S1548C43v30Ev");}
void  S1548C4 ::v31(){vfunc_called(this, "_ZN7S1548C43v31Ev");}
void  S1548C4 ::v32(){vfunc_called(this, "_ZN7S1548C43v32Ev");}
void  S1548C4 ::v33(){vfunc_called(this, "_ZN7S1548C43v33Ev");}
void  S1548C4 ::v34(){vfunc_called(this, "_ZN7S1548C43v34Ev");}
void  S1548C4 ::v35(){vfunc_called(this, "_ZN7S1548C43v35Ev");}
void  S1548C4 ::v36(){vfunc_called(this, "_ZN7S1548C43v36Ev");}
void  S1548C4 ::v37(){vfunc_called(this, "_ZN7S1548C43v37Ev");}
void  S1548C4 ::v38(){vfunc_called(this, "_ZN7S1548C43v38Ev");}
void  S1548C4 ::v39(){vfunc_called(this, "_ZN7S1548C43v39Ev");}
void  S1548C4 ::v40(){vfunc_called(this, "_ZN7S1548C43v40Ev");}
void  S1548C4 ::v41(){vfunc_called(this, "_ZN7S1548C43v41Ev");}
void  S1548C4 ::v42(){vfunc_called(this, "_ZN7S1548C43v42Ev");}
void  S1548C4 ::v43(){vfunc_called(this, "_ZN7S1548C43v43Ev");}
void  S1548C4 ::v44(){vfunc_called(this, "_ZN7S1548C43v44Ev");}
void  S1548C4 ::v45(){vfunc_called(this, "_ZN7S1548C43v45Ev");}
void  S1548C4 ::v46(){vfunc_called(this, "_ZN7S1548C43v46Ev");}
void  S1548C4 ::v47(){vfunc_called(this, "_ZN7S1548C43v47Ev");}
void  S1548C4 ::v48(){vfunc_called(this, "_ZN7S1548C43v48Ev");}
void  S1548C4 ::v49(){vfunc_called(this, "_ZN7S1548C43v49Ev");}
void  S1548C4 ::v50(){vfunc_called(this, "_ZN7S1548C43v50Ev");}
void  S1548C4 ::v51(){vfunc_called(this, "_ZN7S1548C43v51Ev");}
void  S1548C4 ::v52(){vfunc_called(this, "_ZN7S1548C43v52Ev");}
void  S1548C4 ::v53(){vfunc_called(this, "_ZN7S1548C43v53Ev");}
void  S1548C4 ::v54(){vfunc_called(this, "_ZN7S1548C43v54Ev");}
void  S1548C4 ::v55(){vfunc_called(this, "_ZN7S1548C43v55Ev");}
void  S1548C4 ::v56(){vfunc_called(this, "_ZN7S1548C43v56Ev");}
void  S1548C4 ::v57(){vfunc_called(this, "_ZN7S1548C43v57Ev");}
void  S1548C4 ::v58(){vfunc_called(this, "_ZN7S1548C43v58Ev");}
void  S1548C4 ::v59(){vfunc_called(this, "_ZN7S1548C43v59Ev");}
void  S1548C4 ::v60(){vfunc_called(this, "_ZN7S1548C43v60Ev");}
void  S1548C4 ::v61(){vfunc_called(this, "_ZN7S1548C43v61Ev");}
void  S1548C4 ::v62(){vfunc_called(this, "_ZN7S1548C43v62Ev");}
void  S1548C4 ::v63(){vfunc_called(this, "_ZN7S1548C43v63Ev");}
void  S1548C4 ::v64(){vfunc_called(this, "_ZN7S1548C43v64Ev");}
void  S1548C4 ::v65(){vfunc_called(this, "_ZN7S1548C43v65Ev");}
void  S1548C4 ::v66(){vfunc_called(this, "_ZN7S1548C43v66Ev");}
void  S1548C4 ::v67(){vfunc_called(this, "_ZN7S1548C43v67Ev");}
void  S1548C4 ::v68(){vfunc_called(this, "_ZN7S1548C43v68Ev");}
void  S1548C4 ::v69(){vfunc_called(this, "_ZN7S1548C43v69Ev");}
void  S1548C4 ::v70(){vfunc_called(this, "_ZN7S1548C43v70Ev");}
S1548C4 ::S1548C4(){ note_ctor("S1548C4", this);} // tgen

static void Test_S1548C4()
{
  extern Class_Descriptor cd_S1548C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1548C4, buf);
    S1548C4 *dp, &lv = *(dp=new (buf) S1548C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1548C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1548C4)");
    check_field_offset(lv, s1548c4f0, ABISELECT(8,4), "S1548C4.s1548c4f0");
    check_field_offset(lv, s1548c4f1, ABISELECT(16,8), "S1548C4.s1548c4f1");
    check_field_offset(lv, s1548c4f2, ABISELECT(24,16), "S1548C4.s1548c4f2");
    check_field_offset(lv, s1548c4f3, ABISELECT(56,32), "S1548C4.s1548c4f3");
    check_field_offset(lv, s1548c4f4, ABISELECT(64,40), "S1548C4.s1548c4f4");
    check_field_offset(lv, s1548c4f5, ABISELECT(72,44), "S1548C4.s1548c4f5");
    check_field_offset(lv, s1548c4f6, ABISELECT(80,52), "S1548C4.s1548c4f6");
    test_class_info(&lv, &cd_S1548C4);
    dp->~S1548C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1548C4(Test_S1548C4, "S1548C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1548C4C1Ev();
extern void _ZN7S1548C4D1Ev();
Name_Map name_map_S1548C4[] = {
  NSPAIR(_ZN7S1548C4C1Ev),
  NSPAIR(_ZN7S1548C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1548C4[];
extern void _ZN7S1548C4D1Ev();
extern void _ZN7S1548C4D0Ev();
extern void _ZN7S1548C42v7Ev();
extern void _ZN7S1548C42v8Ev();
extern void _ZN7S1548C42v9Ev();
extern void _ZN7S1548C43v10Ev();
extern void _ZN7S1548C43v11Ev();
extern void _ZN7S1548C43v12Ev();
extern void _ZN7S1548C43v13Ev();
extern void _ZN7S1548C43v14Ev();
extern void _ZN7S1548C43v15Ev();
extern void _ZN7S1548C43v16Ev();
extern void _ZN7S1548C43v17Ev();
extern void _ZN7S1548C43v18Ev();
extern void _ZN7S1548C43v19Ev();
extern void _ZN7S1548C43v20Ev();
extern void _ZN7S1548C43v21Ev();
extern void _ZN7S1548C43v22Ev();
extern void _ZN7S1548C43v23Ev();
extern void _ZN7S1548C43v24Ev();
extern void _ZN7S1548C43v25Ev();
extern void _ZN7S1548C43v26Ev();
extern void _ZN7S1548C43v27Ev();
extern void _ZN7S1548C43v28Ev();
extern void _ZN7S1548C43v29Ev();
extern void _ZN7S1548C43v30Ev();
extern void _ZN7S1548C43v31Ev();
extern void _ZN7S1548C43v32Ev();
extern void _ZN7S1548C43v33Ev();
extern void _ZN7S1548C43v34Ev();
extern void _ZN7S1548C43v35Ev();
extern void _ZN7S1548C43v36Ev();
extern void _ZN7S1548C43v37Ev();
extern void _ZN7S1548C43v38Ev();
extern void _ZN7S1548C43v39Ev();
extern void _ZN7S1548C43v40Ev();
extern void _ZN7S1548C43v41Ev();
extern void _ZN7S1548C43v42Ev();
extern void _ZN7S1548C43v43Ev();
extern void _ZN7S1548C43v44Ev();
extern void _ZN7S1548C43v45Ev();
extern void _ZN7S1548C43v46Ev();
extern void _ZN7S1548C43v47Ev();
extern void _ZN7S1548C43v48Ev();
extern void _ZN7S1548C43v49Ev();
extern void _ZN7S1548C43v50Ev();
extern void _ZN7S1548C43v51Ev();
extern void _ZN7S1548C43v52Ev();
extern void _ZN7S1548C43v53Ev();
extern void _ZN7S1548C43v54Ev();
extern void _ZN7S1548C43v55Ev();
extern void _ZN7S1548C43v56Ev();
extern void _ZN7S1548C43v57Ev();
extern void _ZN7S1548C43v58Ev();
extern void _ZN7S1548C43v59Ev();
extern void _ZN7S1548C43v60Ev();
extern void _ZN7S1548C43v61Ev();
extern void _ZN7S1548C43v62Ev();
extern void _ZN7S1548C43v63Ev();
extern void _ZN7S1548C43v64Ev();
extern void _ZN7S1548C43v65Ev();
extern void _ZN7S1548C43v66Ev();
extern void _ZN7S1548C43v67Ev();
extern void _ZN7S1548C43v68Ev();
extern void _ZN7S1548C43v69Ev();
extern void _ZN7S1548C43v70Ev();
static  VTBL_ENTRY vtc_S1548C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1548C4[0]),
  (VTBL_ENTRY)&_ZN7S1548C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1548C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1548C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1548C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1548C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v70Ev,
};
extern VTBL_ENTRY _ZTI7S1548C4[];
extern  VTBL_ENTRY _ZTV7S1548C4[];
Class_Descriptor cd_S1548C4 = {  "S1548C4", // class name
  0,0,//no base classes
  &(vtc_S1548C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1548C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1548C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1548C3  : S1548C4 {
  void *s1548c3f0;
  ::S273C7_nt s1548c3f1;
  int s1548c3f2[5];
  unsigned int s1548c3f3:1;
  unsigned int s1548c3f4:1;
  unsigned int s1548c3f5:1;
  unsigned int s1548c3f6:1;
  unsigned int s1548c3f7:1;
  ::S273C21 s1548c3f8;
  ::S273C17 s1548c3f9;
  unsigned int s1548c3f10:1;
  int s1548c3f11[2];
  void *s1548c3f12;
  int s1548c3f13[3];
  virtual  ~S1548C3(); // _ZN7S1548C3D1Ev
  virtual void  v71(); // _ZN7S1548C33v71Ev
  virtual void  v72(); // _ZN7S1548C33v72Ev
  virtual void  v73(); // _ZN7S1548C33v73Ev
  virtual void  v74(); // _ZN7S1548C33v74Ev
  virtual void  v75(); // _ZN7S1548C33v75Ev
  virtual void  v76(); // _ZN7S1548C33v76Ev
  virtual void  v77(); // _ZN7S1548C33v77Ev
  virtual void  v78(); // _ZN7S1548C33v78Ev
  virtual void  v79(); // _ZN7S1548C33v79Ev
  virtual void  v80(); // _ZN7S1548C33v80Ev
  virtual void  v81(); // _ZN7S1548C33v81Ev
  virtual void  v82(); // _ZN7S1548C33v82Ev
  virtual void  v83(); // _ZN7S1548C33v83Ev
  S1548C3(); // tgen
};
//SIG(-1 S1548C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1548C3 ::~S1548C3(){ note_dtor("S1548C3", this);}
void  S1548C3 ::v71(){vfunc_called(this, "_ZN7S1548C33v71Ev");}
void  S1548C3 ::v72(){vfunc_called(this, "_ZN7S1548C33v72Ev");}
void  S1548C3 ::v73(){vfunc_called(this, "_ZN7S1548C33v73Ev");}
void  S1548C3 ::v74(){vfunc_called(this, "_ZN7S1548C33v74Ev");}
void  S1548C3 ::v75(){vfunc_called(this, "_ZN7S1548C33v75Ev");}
void  S1548C3 ::v76(){vfunc_called(this, "_ZN7S1548C33v76Ev");}
void  S1548C3 ::v77(){vfunc_called(this, "_ZN7S1548C33v77Ev");}
void  S1548C3 ::v78(){vfunc_called(this, "_ZN7S1548C33v78Ev");}
void  S1548C3 ::v79(){vfunc_called(this, "_ZN7S1548C33v79Ev");}
void  S1548C3 ::v80(){vfunc_called(this, "_ZN7S1548C33v80Ev");}
void  S1548C3 ::v81(){vfunc_called(this, "_ZN7S1548C33v81Ev");}
void  S1548C3 ::v82(){vfunc_called(this, "_ZN7S1548C33v82Ev");}
void  S1548C3 ::v83(){vfunc_called(this, "_ZN7S1548C33v83Ev");}
S1548C3 ::S1548C3(){ note_ctor("S1548C3", this);} // tgen

static void Test_S1548C3()
{
  extern Class_Descriptor cd_S1548C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1548C3, buf);
    S1548C3 *dp, &lv = *(dp=new (buf) S1548C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1548C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1548C3)");
    check_base_class_offset(lv, (S1548C4*), 0, "S1548C3");
    check_field_offset(lv, s1548c3f0, ABISELECT(96,60), "S1548C3.s1548c3f0");
    check_field_offset(lv, s1548c3f1, ABISELECT(104,64), "S1548C3.s1548c3f1");
    check_field_offset(lv, s1548c3f2, ABISELECT(112,72), "S1548C3.s1548c3f2");
    set_bf_and_test(lv, s1548c3f3, ABISELECT(132,92), 0, 1, 1, "S1548C3");
    set_bf_and_test(lv, s1548c3f4, ABISELECT(132,92), 1, 1, 1, "S1548C3");
    set_bf_and_test(lv, s1548c3f5, ABISELECT(132,92), 2, 1, 1, "S1548C3");
    set_bf_and_test(lv, s1548c3f6, ABISELECT(132,92), 3, 1, 1, "S1548C3");
    set_bf_and_test(lv, s1548c3f7, ABISELECT(132,92), 4, 1, 1, "S1548C3");
    check_field_offset(lv, s1548c3f8, ABISELECT(136,96), "S1548C3.s1548c3f8");
    check_field_offset(lv, s1548c3f9, ABISELECT(152,108), "S1548C3.s1548c3f9");
    set_bf_and_test(lv, s1548c3f10, ABISELECT(168,120), 0, 1, 1, "S1548C3");
    check_field_offset(lv, s1548c3f11, ABISELECT(172,124), "S1548C3.s1548c3f11");
    check_field_offset(lv, s1548c3f12, ABISELECT(184,132), "S1548C3.s1548c3f12");
    check_field_offset(lv, s1548c3f13, ABISELECT(192,136), "S1548C3.s1548c3f13");
    test_class_info(&lv, &cd_S1548C3);
    dp->~S1548C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1548C3(Test_S1548C3, "S1548C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1548C3C1Ev();
extern void _ZN7S1548C3D1Ev();
Name_Map name_map_S1548C3[] = {
  NSPAIR(_ZN7S1548C3C1Ev),
  NSPAIR(_ZN7S1548C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1548C4;
extern VTBL_ENTRY _ZTI7S1548C4[];
extern  VTBL_ENTRY _ZTV7S1548C4[];
static Base_Class bases_S1548C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1548C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1548C3[];
extern void _ZN7S1548C3D1Ev();
extern void _ZN7S1548C3D0Ev();
extern void _ZN7S1548C42v7Ev();
extern void _ZN7S1548C42v8Ev();
extern void _ZN7S1548C42v9Ev();
extern void _ZN7S1548C43v10Ev();
extern void _ZN7S1548C43v11Ev();
extern void _ZN7S1548C43v12Ev();
extern void _ZN7S1548C43v13Ev();
extern void _ZN7S1548C43v14Ev();
extern void _ZN7S1548C43v15Ev();
extern void _ZN7S1548C43v16Ev();
extern void _ZN7S1548C43v17Ev();
extern void _ZN7S1548C43v18Ev();
extern void _ZN7S1548C43v19Ev();
extern void _ZN7S1548C43v20Ev();
extern void _ZN7S1548C43v21Ev();
extern void _ZN7S1548C43v22Ev();
extern void _ZN7S1548C43v23Ev();
extern void _ZN7S1548C43v24Ev();
extern void _ZN7S1548C43v25Ev();
extern void _ZN7S1548C43v26Ev();
extern void _ZN7S1548C43v27Ev();
extern void _ZN7S1548C43v28Ev();
extern void _ZN7S1548C43v29Ev();
extern void _ZN7S1548C43v30Ev();
extern void _ZN7S1548C43v31Ev();
extern void _ZN7S1548C43v32Ev();
extern void _ZN7S1548C43v33Ev();
extern void _ZN7S1548C43v34Ev();
extern void _ZN7S1548C43v35Ev();
extern void _ZN7S1548C43v36Ev();
extern void _ZN7S1548C43v37Ev();
extern void _ZN7S1548C43v38Ev();
extern void _ZN7S1548C43v39Ev();
extern void _ZN7S1548C43v40Ev();
extern void _ZN7S1548C43v41Ev();
extern void _ZN7S1548C43v42Ev();
extern void _ZN7S1548C43v43Ev();
extern void _ZN7S1548C43v44Ev();
extern void _ZN7S1548C43v45Ev();
extern void _ZN7S1548C43v46Ev();
extern void _ZN7S1548C43v47Ev();
extern void _ZN7S1548C43v48Ev();
extern void _ZN7S1548C43v49Ev();
extern void _ZN7S1548C43v50Ev();
extern void _ZN7S1548C43v51Ev();
extern void _ZN7S1548C43v52Ev();
extern void _ZN7S1548C43v53Ev();
extern void _ZN7S1548C43v54Ev();
extern void _ZN7S1548C43v55Ev();
extern void _ZN7S1548C43v56Ev();
extern void _ZN7S1548C43v57Ev();
extern void _ZN7S1548C43v58Ev();
extern void _ZN7S1548C43v59Ev();
extern void _ZN7S1548C43v60Ev();
extern void _ZN7S1548C43v61Ev();
extern void _ZN7S1548C43v62Ev();
extern void _ZN7S1548C43v63Ev();
extern void _ZN7S1548C43v64Ev();
extern void _ZN7S1548C43v65Ev();
extern void _ZN7S1548C43v66Ev();
extern void _ZN7S1548C43v67Ev();
extern void _ZN7S1548C43v68Ev();
extern void _ZN7S1548C43v69Ev();
extern void _ZN7S1548C43v70Ev();
extern void _ZN7S1548C33v71Ev();
extern void _ZN7S1548C33v72Ev();
extern void _ZN7S1548C33v73Ev();
extern void _ZN7S1548C33v74Ev();
extern void _ZN7S1548C33v75Ev();
extern void _ZN7S1548C33v76Ev();
extern void _ZN7S1548C33v77Ev();
extern void _ZN7S1548C33v78Ev();
extern void _ZN7S1548C33v79Ev();
extern void _ZN7S1548C33v80Ev();
extern void _ZN7S1548C33v81Ev();
extern void _ZN7S1548C33v82Ev();
extern void _ZN7S1548C33v83Ev();
static  VTBL_ENTRY vtc_S1548C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1548C3[0]),
  (VTBL_ENTRY)&_ZN7S1548C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1548C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1548C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1548C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1548C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v83Ev,
};
extern VTBL_ENTRY _ZTI7S1548C3[];
extern  VTBL_ENTRY _ZTV7S1548C3[];
Class_Descriptor cd_S1548C3 = {  "S1548C3", // class name
  bases_S1548C3, 1,
  &(vtc_S1548C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1548C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1548C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1548C2  : S1548C3 {
  unsigned int s1548c2f0:1;
  unsigned int s1548c2f1:1;
  unsigned int s1548c2f2:1;
  unsigned int s1548c2f3:1;
  ::S664C12_nt s1548c2f4;
  char s1548c2f5[2];
  ::S273C7_nt s1548c2f6;
  ::S632C13 s1548c2f7;
  ::S273C7_nt s1548c2f8;
  virtual  ~S1548C2(); // _ZN7S1548C2D1Ev
  virtual void  v84(); // _ZN7S1548C23v84Ev
  virtual void  v85(); // _ZN7S1548C23v85Ev
  virtual void  v86(); // _ZN7S1548C23v86Ev
  virtual void  v87(); // _ZN7S1548C23v87Ev
  virtual void  v88(); // _ZN7S1548C23v88Ev
  virtual void  v89(); // _ZN7S1548C23v89Ev
  virtual void  v90(); // _ZN7S1548C23v90Ev
  S1548C2(); // tgen
};
//SIG(-1 S1548C2) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S1548C2 ::~S1548C2(){ note_dtor("S1548C2", this);}
void  S1548C2 ::v84(){vfunc_called(this, "_ZN7S1548C23v84Ev");}
void  S1548C2 ::v85(){vfunc_called(this, "_ZN7S1548C23v85Ev");}
void  S1548C2 ::v86(){vfunc_called(this, "_ZN7S1548C23v86Ev");}
void  S1548C2 ::v87(){vfunc_called(this, "_ZN7S1548C23v87Ev");}
void  S1548C2 ::v88(){vfunc_called(this, "_ZN7S1548C23v88Ev");}
void  S1548C2 ::v89(){vfunc_called(this, "_ZN7S1548C23v89Ev");}
void  S1548C2 ::v90(){vfunc_called(this, "_ZN7S1548C23v90Ev");}
S1548C2 ::S1548C2(){ note_ctor("S1548C2", this);} // tgen

static void Test_S1548C2()
{
  extern Class_Descriptor cd_S1548C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1548C2, buf);
    S1548C2 *dp, &lv = *(dp=new (buf) S1548C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1548C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1548C2)");
    check_base_class_offset(lv, (S1548C4*)(S1548C3*), 0, "S1548C2");
    check_base_class_offset(lv, (S1548C3*), 0, "S1548C2");
    set_bf_and_test(lv, s1548c2f0, ABISELECT(204,148), 0, 1, 1, "S1548C2");
    set_bf_and_test(lv, s1548c2f1, ABISELECT(204,148), 1, 1, 1, "S1548C2");
    set_bf_and_test(lv, s1548c2f2, ABISELECT(204,148), 2, 1, 1, "S1548C2");
    set_bf_and_test(lv, s1548c2f3, ABISELECT(204,148), 3, 1, 1, "S1548C2");
    check_field_offset(lv, s1548c2f4, ABISELECT(208,152), "S1548C2.s1548c2f4");
    check_field_offset(lv, s1548c2f5, ABISELECT(220,164), "S1548C2.s1548c2f5");
    check_field_offset(lv, s1548c2f6, ABISELECT(224,168), "S1548C2.s1548c2f6");
    check_field_offset(lv, s1548c2f7, ABISELECT(232,176), "S1548C2.s1548c2f7");
    check_field_offset(lv, s1548c2f8, ABISELECT(244,188), "S1548C2.s1548c2f8");
    test_class_info(&lv, &cd_S1548C2);
    dp->~S1548C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1548C2(Test_S1548C2, "S1548C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1548C2C1Ev();
extern void _ZN7S1548C2D1Ev();
Name_Map name_map_S1548C2[] = {
  NSPAIR(_ZN7S1548C2C1Ev),
  NSPAIR(_ZN7S1548C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1548C4;
extern VTBL_ENTRY _ZTI7S1548C4[];
extern  VTBL_ENTRY _ZTV7S1548C4[];
extern Class_Descriptor cd_S1548C3;
extern VTBL_ENTRY _ZTI7S1548C3[];
extern  VTBL_ENTRY _ZTV7S1548C3[];
static Base_Class bases_S1548C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1548C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1548C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1548C2[];
extern void _ZN7S1548C2D1Ev();
extern void _ZN7S1548C2D0Ev();
extern void _ZN7S1548C42v7Ev();
extern void _ZN7S1548C42v8Ev();
extern void _ZN7S1548C42v9Ev();
extern void _ZN7S1548C43v10Ev();
extern void _ZN7S1548C43v11Ev();
extern void _ZN7S1548C43v12Ev();
extern void _ZN7S1548C43v13Ev();
extern void _ZN7S1548C43v14Ev();
extern void _ZN7S1548C43v15Ev();
extern void _ZN7S1548C43v16Ev();
extern void _ZN7S1548C43v17Ev();
extern void _ZN7S1548C43v18Ev();
extern void _ZN7S1548C43v19Ev();
extern void _ZN7S1548C43v20Ev();
extern void _ZN7S1548C43v21Ev();
extern void _ZN7S1548C43v22Ev();
extern void _ZN7S1548C43v23Ev();
extern void _ZN7S1548C43v24Ev();
extern void _ZN7S1548C43v25Ev();
extern void _ZN7S1548C43v26Ev();
extern void _ZN7S1548C43v27Ev();
extern void _ZN7S1548C43v28Ev();
extern void _ZN7S1548C43v29Ev();
extern void _ZN7S1548C43v30Ev();
extern void _ZN7S1548C43v31Ev();
extern void _ZN7S1548C43v32Ev();
extern void _ZN7S1548C43v33Ev();
extern void _ZN7S1548C43v34Ev();
extern void _ZN7S1548C43v35Ev();
extern void _ZN7S1548C43v36Ev();
extern void _ZN7S1548C43v37Ev();
extern void _ZN7S1548C43v38Ev();
extern void _ZN7S1548C43v39Ev();
extern void _ZN7S1548C43v40Ev();
extern void _ZN7S1548C43v41Ev();
extern void _ZN7S1548C43v42Ev();
extern void _ZN7S1548C43v43Ev();
extern void _ZN7S1548C43v44Ev();
extern void _ZN7S1548C43v45Ev();
extern void _ZN7S1548C43v46Ev();
extern void _ZN7S1548C43v47Ev();
extern void _ZN7S1548C43v48Ev();
extern void _ZN7S1548C43v49Ev();
extern void _ZN7S1548C43v50Ev();
extern void _ZN7S1548C43v51Ev();
extern void _ZN7S1548C43v52Ev();
extern void _ZN7S1548C43v53Ev();
extern void _ZN7S1548C43v54Ev();
extern void _ZN7S1548C43v55Ev();
extern void _ZN7S1548C43v56Ev();
extern void _ZN7S1548C43v57Ev();
extern void _ZN7S1548C43v58Ev();
extern void _ZN7S1548C43v59Ev();
extern void _ZN7S1548C43v60Ev();
extern void _ZN7S1548C43v61Ev();
extern void _ZN7S1548C43v62Ev();
extern void _ZN7S1548C43v63Ev();
extern void _ZN7S1548C43v64Ev();
extern void _ZN7S1548C43v65Ev();
extern void _ZN7S1548C43v66Ev();
extern void _ZN7S1548C43v67Ev();
extern void _ZN7S1548C43v68Ev();
extern void _ZN7S1548C43v69Ev();
extern void _ZN7S1548C43v70Ev();
extern void _ZN7S1548C33v71Ev();
extern void _ZN7S1548C33v72Ev();
extern void _ZN7S1548C33v73Ev();
extern void _ZN7S1548C33v74Ev();
extern void _ZN7S1548C33v75Ev();
extern void _ZN7S1548C33v76Ev();
extern void _ZN7S1548C33v77Ev();
extern void _ZN7S1548C33v78Ev();
extern void _ZN7S1548C33v79Ev();
extern void _ZN7S1548C33v80Ev();
extern void _ZN7S1548C33v81Ev();
extern void _ZN7S1548C33v82Ev();
extern void _ZN7S1548C33v83Ev();
extern void _ZN7S1548C23v84Ev();
extern void _ZN7S1548C23v85Ev();
extern void _ZN7S1548C23v86Ev();
extern void _ZN7S1548C23v87Ev();
extern void _ZN7S1548C23v88Ev();
extern void _ZN7S1548C23v89Ev();
extern void _ZN7S1548C23v90Ev();
static  VTBL_ENTRY vtc_S1548C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1548C2[0]),
  (VTBL_ENTRY)&_ZN7S1548C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1548C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1548C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1548C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1548C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1548C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1548C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1548C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1548C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1548C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1548C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1548C23v90Ev,
};
extern VTBL_ENTRY _ZTI7S1548C2[];
extern  VTBL_ENTRY _ZTV7S1548C2[];
Class_Descriptor cd_S1548C2 = {  "S1548C2", // class name
  bases_S1548C2, 2,
  &(vtc_S1548C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1548C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1548C2),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1548C1  : S1548C2 {
  ::S273C7_nt s1548c1f0[2];
  ::S273C7_nt s1548c1f1[2];
  ::S273C7_nt s1548c1f2[2];
  int s1548c1f3[14];
  unsigned int s1548c1f4:1;
  unsigned int s1548c1f5:1;
  virtual  ~S1548C1(); // _ZN7S1548C1D1Ev
  virtual void  v1(); // _ZN7S1548C12v1Ev
  virtual void  v2(); // _ZN7S1548C12v2Ev
  virtual void  v3(); // _ZN7S1548C12v3Ev
  virtual void  v4(); // _ZN7S1548C12v4Ev
  virtual void  v5(); // _ZN7S1548C12v5Ev
  virtual void  v6(); // _ZN7S1548C12v6Ev
  S1548C1(); // tgen
};
//SIG(1 S1548C1) C1{ BC2{ BC3{ BC4{ vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v84 v85 v86 v87 v88 v89 v90 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 v4 v5 v6 FC5[2] FC5[2] FC5[2] Fi[14] Fi:1 Fi:1}


 S1548C1 ::~S1548C1(){ note_dtor("S1548C1", this);}
void  S1548C1 ::v1(){vfunc_called(this, "_ZN7S1548C12v1Ev");}
void  S1548C1 ::v2(){vfunc_called(this, "_ZN7S1548C12v2Ev");}
void  S1548C1 ::v3(){vfunc_called(this, "_ZN7S1548C12v3Ev");}
void  S1548C1 ::v4(){vfunc_called(this, "_ZN7S1548C12v4Ev");}
void  S1548C1 ::v5(){vfunc_called(this, "_ZN7S1548C12v5Ev");}
void  S1548C1 ::v6(){vfunc_called(this, "_ZN7S1548C12v6Ev");}
S1548C1 ::S1548C1(){ note_ctor("S1548C1", this);} // tgen

static void Test_S1548C1()
{
  extern Class_Descriptor cd_S1548C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(46,77)];
    init_test(&cd_S1548C1, buf);
    S1548C1 *dp, &lv = *(dp=new (buf) S1548C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(360,304), "sizeof(S1548C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1548C1)");
    check_base_class_offset(lv, (S1548C4*)(S1548C3*)(S1548C2*), 0, "S1548C1");
    check_base_class_offset(lv, (S1548C3*)(S1548C2*), 0, "S1548C1");
    check_base_class_offset(lv, (S1548C2*), 0, "S1548C1");
    check_field_offset(lv, s1548c1f0, ABISELECT(252,196), "S1548C1.s1548c1f0");
    check_field_offset(lv, s1548c1f1, ABISELECT(268,212), "S1548C1.s1548c1f1");
    check_field_offset(lv, s1548c1f2, ABISELECT(284,228), "S1548C1.s1548c1f2");
    check_field_offset(lv, s1548c1f3, ABISELECT(300,244), "S1548C1.s1548c1f3");
    set_bf_and_test(lv, s1548c1f4, ABISELECT(356,300), 0, 1, 1, "S1548C1");
    set_bf_and_test(lv, s1548c1f5, ABISELECT(356,300), 1, 1, 1, "S1548C1");
    test_class_info(&lv, &cd_S1548C1);
    dp->~S1548C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1548C1(Test_S1548C1, "S1548C1", ABISELECT(360,304));

#else // __cplusplus

extern void _ZN7S1548C1C1Ev();
extern void _ZN7S1548C1D1Ev();
Name_Map name_map_S1548C1[] = {
  NSPAIR(_ZN7S1548C1C1Ev),
  NSPAIR(_ZN7S1548C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1548C4;
extern VTBL_ENTRY _ZTI7S1548C4[];
extern  VTBL_ENTRY _ZTV7S1548C4[];
extern Class_Descriptor cd_S1548C3;
extern VTBL_ENTRY _ZTI7S1548C3[];
extern  VTBL_ENTRY _ZTV7S1548C3[];
extern Class_Descriptor cd_S1548C2;
extern VTBL_ENTRY _ZTI7S1548C2[];
extern  VTBL_ENTRY _ZTV7S1548C2[];
static Base_Class bases_S1548C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1548C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1548C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1548C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1548C1[];
extern void _ZN7S1548C1D1Ev();
extern void _ZN7S1548C1D0Ev();
extern void _ZN7S1548C42v7Ev();
extern void _ZN7S1548C42v8Ev();
extern void _ZN7S1548C42v9Ev();
extern void _ZN7S1548C43v10Ev();
extern void _ZN7S1548C43v11Ev();
extern void _ZN7S1548C43v12Ev();
extern void _ZN7S1548C43v13Ev();
extern void _ZN7S1548C43v14Ev();
extern void _ZN7S1548C43v15Ev();
extern void _ZN7S1548C43v16Ev();
extern void _ZN7S1548C43v17Ev();
extern void _ZN7S1548C43v18Ev();
extern void _ZN7S1548C43v19Ev();
extern void _ZN7S1548C43v20Ev();
extern void _ZN7S1548C43v21Ev();
extern void _ZN7S1548C43v22Ev();
extern void _ZN7S1548C43v23Ev();
extern void _ZN7S1548C43v24Ev();
extern void _ZN7S1548C43v25Ev();
extern void _ZN7S1548C43v26Ev();
extern void _ZN7S1548C43v27Ev();
extern void _ZN7S1548C43v28Ev();
extern void _ZN7S1548C43v29Ev();
extern void _ZN7S1548C43v30Ev();
extern void _ZN7S1548C43v31Ev();
extern void _ZN7S1548C43v32Ev();
extern void _ZN7S1548C43v33Ev();
extern void _ZN7S1548C43v34Ev();
extern void _ZN7S1548C43v35Ev();
extern void _ZN7S1548C43v36Ev();
extern void _ZN7S1548C43v37Ev();
extern void _ZN7S1548C43v38Ev();
extern void _ZN7S1548C43v39Ev();
extern void _ZN7S1548C43v40Ev();
extern void _ZN7S1548C43v41Ev();
extern void _ZN7S1548C43v42Ev();
extern void _ZN7S1548C43v43Ev();
extern void _ZN7S1548C43v44Ev();
extern void _ZN7S1548C43v45Ev();
extern void _ZN7S1548C43v46Ev();
extern void _ZN7S1548C43v47Ev();
extern void _ZN7S1548C43v48Ev();
extern void _ZN7S1548C43v49Ev();
extern void _ZN7S1548C43v50Ev();
extern void _ZN7S1548C43v51Ev();
extern void _ZN7S1548C43v52Ev();
extern void _ZN7S1548C43v53Ev();
extern void _ZN7S1548C43v54Ev();
extern void _ZN7S1548C43v55Ev();
extern void _ZN7S1548C43v56Ev();
extern void _ZN7S1548C43v57Ev();
extern void _ZN7S1548C43v58Ev();
extern void _ZN7S1548C43v59Ev();
extern void _ZN7S1548C43v60Ev();
extern void _ZN7S1548C43v61Ev();
extern void _ZN7S1548C43v62Ev();
extern void _ZN7S1548C43v63Ev();
extern void _ZN7S1548C43v64Ev();
extern void _ZN7S1548C43v65Ev();
extern void _ZN7S1548C43v66Ev();
extern void _ZN7S1548C43v67Ev();
extern void _ZN7S1548C43v68Ev();
extern void _ZN7S1548C43v69Ev();
extern void _ZN7S1548C43v70Ev();
extern void _ZN7S1548C33v71Ev();
extern void _ZN7S1548C33v72Ev();
extern void _ZN7S1548C33v73Ev();
extern void _ZN7S1548C33v74Ev();
extern void _ZN7S1548C33v75Ev();
extern void _ZN7S1548C33v76Ev();
extern void _ZN7S1548C33v77Ev();
extern void _ZN7S1548C33v78Ev();
extern void _ZN7S1548C33v79Ev();
extern void _ZN7S1548C33v80Ev();
extern void _ZN7S1548C33v81Ev();
extern void _ZN7S1548C33v82Ev();
extern void _ZN7S1548C33v83Ev();
extern void _ZN7S1548C23v84Ev();
extern void _ZN7S1548C23v85Ev();
extern void _ZN7S1548C23v86Ev();
extern void _ZN7S1548C23v87Ev();
extern void _ZN7S1548C23v88Ev();
extern void _ZN7S1548C23v89Ev();
extern void _ZN7S1548C23v90Ev();
extern void _ZN7S1548C12v1Ev();
extern void _ZN7S1548C12v2Ev();
extern void _ZN7S1548C12v3Ev();
extern void _ZN7S1548C12v4Ev();
extern void _ZN7S1548C12v5Ev();
extern void _ZN7S1548C12v6Ev();
static  VTBL_ENTRY vtc_S1548C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1548C1[0]),
  (VTBL_ENTRY)&_ZN7S1548C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1548C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1548C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1548C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1548C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1548C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1548C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1548C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1548C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1548C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1548C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1548C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1548C23v89Ev,
  (VTBL_ENTRY)&_ZN7S1548C23v90Ev,
  (VTBL_ENTRY)&_ZN7S1548C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1548C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1548C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1548C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1548C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1548C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S1548C1[];
extern  VTBL_ENTRY _ZTV7S1548C1[];
Class_Descriptor cd_S1548C1 = {  "S1548C1", // class name
  bases_S1548C1, 3,
  &(vtc_S1548C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(360,304), // object size
  NSPAIRA(_ZTI7S1548C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1548C1),94, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1467C4  {
  int s1467c4f0;
  __tsi64 s1467c4f1;
  void *s1467c4f2[4];
  int s1467c4f3[2];
  void *s1467c4f4;
  ::S273C7_nt s1467c4f5;
  void *s1467c4f6[2];
  virtual  ~S1467C4(); // _ZN7S1467C4D1Ev
  virtual void  v5(); // _ZN7S1467C42v5Ev
  virtual void  v6(); // _ZN7S1467C42v6Ev
  virtual void  v7(); // _ZN7S1467C42v7Ev
  virtual void  v8(); // _ZN7S1467C42v8Ev
  virtual void  v9(); // _ZN7S1467C42v9Ev
  virtual void  v10(); // _ZN7S1467C43v10Ev
  virtual void  v11(); // _ZN7S1467C43v11Ev
  virtual void  v12(); // _ZN7S1467C43v12Ev
  virtual void  v13(); // _ZN7S1467C43v13Ev
  virtual void  v14(); // _ZN7S1467C43v14Ev
  virtual void  v15(); // _ZN7S1467C43v15Ev
  virtual void  v16(); // _ZN7S1467C43v16Ev
  virtual void  v17(); // _ZN7S1467C43v17Ev
  virtual void  v18(); // _ZN7S1467C43v18Ev
  virtual void  v19(); // _ZN7S1467C43v19Ev
  virtual void  v20(); // _ZN7S1467C43v20Ev
  virtual void  v21(); // _ZN7S1467C43v21Ev
  virtual void  v22(); // _ZN7S1467C43v22Ev
  virtual void  v23(); // _ZN7S1467C43v23Ev
  virtual void  v24(); // _ZN7S1467C43v24Ev
  virtual void  v25(); // _ZN7S1467C43v25Ev
  virtual void  v26(); // _ZN7S1467C43v26Ev
  virtual void  v27(); // _ZN7S1467C43v27Ev
  virtual void  v28(); // _ZN7S1467C43v28Ev
  virtual void  v29(); // _ZN7S1467C43v29Ev
  virtual void  v30(); // _ZN7S1467C43v30Ev
  virtual void  v31(); // _ZN7S1467C43v31Ev
  virtual void  v32(); // _ZN7S1467C43v32Ev
  virtual void  v33(); // _ZN7S1467C43v33Ev
  virtual void  v34(); // _ZN7S1467C43v34Ev
  virtual void  v35(); // _ZN7S1467C43v35Ev
  virtual void  v36(); // _ZN7S1467C43v36Ev
  virtual void  v37(); // _ZN7S1467C43v37Ev
  virtual void  v38(); // _ZN7S1467C43v38Ev
  virtual void  v39(); // _ZN7S1467C43v39Ev
  virtual void  v40(); // _ZN7S1467C43v40Ev
  virtual void  v41(); // _ZN7S1467C43v41Ev
  virtual void  v42(); // _ZN7S1467C43v42Ev
  virtual void  v43(); // _ZN7S1467C43v43Ev
  virtual void  v44(); // _ZN7S1467C43v44Ev
  virtual void  v45(); // _ZN7S1467C43v45Ev
  virtual void  v46(); // _ZN7S1467C43v46Ev
  virtual void  v47(); // _ZN7S1467C43v47Ev
  virtual void  v48(); // _ZN7S1467C43v48Ev
  virtual void  v49(); // _ZN7S1467C43v49Ev
  virtual void  v50(); // _ZN7S1467C43v50Ev
  virtual void  v51(); // _ZN7S1467C43v51Ev
  virtual void  v52(); // _ZN7S1467C43v52Ev
  virtual void  v53(); // _ZN7S1467C43v53Ev
  virtual void  v54(); // _ZN7S1467C43v54Ev
  virtual void  v55(); // _ZN7S1467C43v55Ev
  virtual void  v56(); // _ZN7S1467C43v56Ev
  virtual void  v57(); // _ZN7S1467C43v57Ev
  virtual void  v58(); // _ZN7S1467C43v58Ev
  virtual void  v59(); // _ZN7S1467C43v59Ev
  virtual void  v60(); // _ZN7S1467C43v60Ev
  virtual void  v61(); // _ZN7S1467C43v61Ev
  virtual void  v62(); // _ZN7S1467C43v62Ev
  virtual void  v63(); // _ZN7S1467C43v63Ev
  virtual void  v64(); // _ZN7S1467C43v64Ev
  virtual void  v65(); // _ZN7S1467C43v65Ev
  virtual void  v66(); // _ZN7S1467C43v66Ev
  virtual void  v67(); // _ZN7S1467C43v67Ev
  virtual void  v68(); // _ZN7S1467C43v68Ev
  S1467C4(); // tgen
};
//SIG(-1 S1467C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1467C4 ::~S1467C4(){ note_dtor("S1467C4", this);}
void  S1467C4 ::v5(){vfunc_called(this, "_ZN7S1467C42v5Ev");}
void  S1467C4 ::v6(){vfunc_called(this, "_ZN7S1467C42v6Ev");}
void  S1467C4 ::v7(){vfunc_called(this, "_ZN7S1467C42v7Ev");}
void  S1467C4 ::v8(){vfunc_called(this, "_ZN7S1467C42v8Ev");}
void  S1467C4 ::v9(){vfunc_called(this, "_ZN7S1467C42v9Ev");}
void  S1467C4 ::v10(){vfunc_called(this, "_ZN7S1467C43v10Ev");}
void  S1467C4 ::v11(){vfunc_called(this, "_ZN7S1467C43v11Ev");}
void  S1467C4 ::v12(){vfunc_called(this, "_ZN7S1467C43v12Ev");}
void  S1467C4 ::v13(){vfunc_called(this, "_ZN7S1467C43v13Ev");}
void  S1467C4 ::v14(){vfunc_called(this, "_ZN7S1467C43v14Ev");}
void  S1467C4 ::v15(){vfunc_called(this, "_ZN7S1467C43v15Ev");}
void  S1467C4 ::v16(){vfunc_called(this, "_ZN7S1467C43v16Ev");}
void  S1467C4 ::v17(){vfunc_called(this, "_ZN7S1467C43v17Ev");}
void  S1467C4 ::v18(){vfunc_called(this, "_ZN7S1467C43v18Ev");}
void  S1467C4 ::v19(){vfunc_called(this, "_ZN7S1467C43v19Ev");}
void  S1467C4 ::v20(){vfunc_called(this, "_ZN7S1467C43v20Ev");}
void  S1467C4 ::v21(){vfunc_called(this, "_ZN7S1467C43v21Ev");}
void  S1467C4 ::v22(){vfunc_called(this, "_ZN7S1467C43v22Ev");}
void  S1467C4 ::v23(){vfunc_called(this, "_ZN7S1467C43v23Ev");}
void  S1467C4 ::v24(){vfunc_called(this, "_ZN7S1467C43v24Ev");}
void  S1467C4 ::v25(){vfunc_called(this, "_ZN7S1467C43v25Ev");}
void  S1467C4 ::v26(){vfunc_called(this, "_ZN7S1467C43v26Ev");}
void  S1467C4 ::v27(){vfunc_called(this, "_ZN7S1467C43v27Ev");}
void  S1467C4 ::v28(){vfunc_called(this, "_ZN7S1467C43v28Ev");}
void  S1467C4 ::v29(){vfunc_called(this, "_ZN7S1467C43v29Ev");}
void  S1467C4 ::v30(){vfunc_called(this, "_ZN7S1467C43v30Ev");}
void  S1467C4 ::v31(){vfunc_called(this, "_ZN7S1467C43v31Ev");}
void  S1467C4 ::v32(){vfunc_called(this, "_ZN7S1467C43v32Ev");}
void  S1467C4 ::v33(){vfunc_called(this, "_ZN7S1467C43v33Ev");}
void  S1467C4 ::v34(){vfunc_called(this, "_ZN7S1467C43v34Ev");}
void  S1467C4 ::v35(){vfunc_called(this, "_ZN7S1467C43v35Ev");}
void  S1467C4 ::v36(){vfunc_called(this, "_ZN7S1467C43v36Ev");}
void  S1467C4 ::v37(){vfunc_called(this, "_ZN7S1467C43v37Ev");}
void  S1467C4 ::v38(){vfunc_called(this, "_ZN7S1467C43v38Ev");}
void  S1467C4 ::v39(){vfunc_called(this, "_ZN7S1467C43v39Ev");}
void  S1467C4 ::v40(){vfunc_called(this, "_ZN7S1467C43v40Ev");}
void  S1467C4 ::v41(){vfunc_called(this, "_ZN7S1467C43v41Ev");}
void  S1467C4 ::v42(){vfunc_called(this, "_ZN7S1467C43v42Ev");}
void  S1467C4 ::v43(){vfunc_called(this, "_ZN7S1467C43v43Ev");}
void  S1467C4 ::v44(){vfunc_called(this, "_ZN7S1467C43v44Ev");}
void  S1467C4 ::v45(){vfunc_called(this, "_ZN7S1467C43v45Ev");}
void  S1467C4 ::v46(){vfunc_called(this, "_ZN7S1467C43v46Ev");}
void  S1467C4 ::v47(){vfunc_called(this, "_ZN7S1467C43v47Ev");}
void  S1467C4 ::v48(){vfunc_called(this, "_ZN7S1467C43v48Ev");}
void  S1467C4 ::v49(){vfunc_called(this, "_ZN7S1467C43v49Ev");}
void  S1467C4 ::v50(){vfunc_called(this, "_ZN7S1467C43v50Ev");}
void  S1467C4 ::v51(){vfunc_called(this, "_ZN7S1467C43v51Ev");}
void  S1467C4 ::v52(){vfunc_called(this, "_ZN7S1467C43v52Ev");}
void  S1467C4 ::v53(){vfunc_called(this, "_ZN7S1467C43v53Ev");}
void  S1467C4 ::v54(){vfunc_called(this, "_ZN7S1467C43v54Ev");}
void  S1467C4 ::v55(){vfunc_called(this, "_ZN7S1467C43v55Ev");}
void  S1467C4 ::v56(){vfunc_called(this, "_ZN7S1467C43v56Ev");}
void  S1467C4 ::v57(){vfunc_called(this, "_ZN7S1467C43v57Ev");}
void  S1467C4 ::v58(){vfunc_called(this, "_ZN7S1467C43v58Ev");}
void  S1467C4 ::v59(){vfunc_called(this, "_ZN7S1467C43v59Ev");}
void  S1467C4 ::v60(){vfunc_called(this, "_ZN7S1467C43v60Ev");}
void  S1467C4 ::v61(){vfunc_called(this, "_ZN7S1467C43v61Ev");}
void  S1467C4 ::v62(){vfunc_called(this, "_ZN7S1467C43v62Ev");}
void  S1467C4 ::v63(){vfunc_called(this, "_ZN7S1467C43v63Ev");}
void  S1467C4 ::v64(){vfunc_called(this, "_ZN7S1467C43v64Ev");}
void  S1467C4 ::v65(){vfunc_called(this, "_ZN7S1467C43v65Ev");}
void  S1467C4 ::v66(){vfunc_called(this, "_ZN7S1467C43v66Ev");}
void  S1467C4 ::v67(){vfunc_called(this, "_ZN7S1467C43v67Ev");}
void  S1467C4 ::v68(){vfunc_called(this, "_ZN7S1467C43v68Ev");}
S1467C4 ::S1467C4(){ note_ctor("S1467C4", this);} // tgen

static void Test_S1467C4()
{
  extern Class_Descriptor cd_S1467C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1467C4, buf);
    S1467C4 *dp, &lv = *(dp=new (buf) S1467C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1467C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1467C4)");
    check_field_offset(lv, s1467c4f0, ABISELECT(8,4), "S1467C4.s1467c4f0");
    check_field_offset(lv, s1467c4f1, ABISELECT(16,8), "S1467C4.s1467c4f1");
    check_field_offset(lv, s1467c4f2, ABISELECT(24,16), "S1467C4.s1467c4f2");
    check_field_offset(lv, s1467c4f3, ABISELECT(56,32), "S1467C4.s1467c4f3");
    check_field_offset(lv, s1467c4f4, ABISELECT(64,40), "S1467C4.s1467c4f4");
    check_field_offset(lv, s1467c4f5, ABISELECT(72,44), "S1467C4.s1467c4f5");
    check_field_offset(lv, s1467c4f6, ABISELECT(80,52), "S1467C4.s1467c4f6");
    test_class_info(&lv, &cd_S1467C4);
    dp->~S1467C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1467C4(Test_S1467C4, "S1467C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1467C4C1Ev();
extern void _ZN7S1467C4D1Ev();
Name_Map name_map_S1467C4[] = {
  NSPAIR(_ZN7S1467C4C1Ev),
  NSPAIR(_ZN7S1467C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1467C4[];
extern void _ZN7S1467C4D1Ev();
extern void _ZN7S1467C4D0Ev();
extern void _ZN7S1467C42v5Ev();
extern void _ZN7S1467C42v6Ev();
extern void _ZN7S1467C42v7Ev();
extern void _ZN7S1467C42v8Ev();
extern void _ZN7S1467C42v9Ev();
extern void _ZN7S1467C43v10Ev();
extern void _ZN7S1467C43v11Ev();
extern void _ZN7S1467C43v12Ev();
extern void _ZN7S1467C43v13Ev();
extern void _ZN7S1467C43v14Ev();
extern void _ZN7S1467C43v15Ev();
extern void _ZN7S1467C43v16Ev();
extern void _ZN7S1467C43v17Ev();
extern void _ZN7S1467C43v18Ev();
extern void _ZN7S1467C43v19Ev();
extern void _ZN7S1467C43v20Ev();
extern void _ZN7S1467C43v21Ev();
extern void _ZN7S1467C43v22Ev();
extern void _ZN7S1467C43v23Ev();
extern void _ZN7S1467C43v24Ev();
extern void _ZN7S1467C43v25Ev();
extern void _ZN7S1467C43v26Ev();
extern void _ZN7S1467C43v27Ev();
extern void _ZN7S1467C43v28Ev();
extern void _ZN7S1467C43v29Ev();
extern void _ZN7S1467C43v30Ev();
extern void _ZN7S1467C43v31Ev();
extern void _ZN7S1467C43v32Ev();
extern void _ZN7S1467C43v33Ev();
extern void _ZN7S1467C43v34Ev();
extern void _ZN7S1467C43v35Ev();
extern void _ZN7S1467C43v36Ev();
extern void _ZN7S1467C43v37Ev();
extern void _ZN7S1467C43v38Ev();
extern void _ZN7S1467C43v39Ev();
extern void _ZN7S1467C43v40Ev();
extern void _ZN7S1467C43v41Ev();
extern void _ZN7S1467C43v42Ev();
extern void _ZN7S1467C43v43Ev();
extern void _ZN7S1467C43v44Ev();
extern void _ZN7S1467C43v45Ev();
extern void _ZN7S1467C43v46Ev();
extern void _ZN7S1467C43v47Ev();
extern void _ZN7S1467C43v48Ev();
extern void _ZN7S1467C43v49Ev();
extern void _ZN7S1467C43v50Ev();
extern void _ZN7S1467C43v51Ev();
extern void _ZN7S1467C43v52Ev();
extern void _ZN7S1467C43v53Ev();
extern void _ZN7S1467C43v54Ev();
extern void _ZN7S1467C43v55Ev();
extern void _ZN7S1467C43v56Ev();
extern void _ZN7S1467C43v57Ev();
extern void _ZN7S1467C43v58Ev();
extern void _ZN7S1467C43v59Ev();
extern void _ZN7S1467C43v60Ev();
extern void _ZN7S1467C43v61Ev();
extern void _ZN7S1467C43v62Ev();
extern void _ZN7S1467C43v63Ev();
extern void _ZN7S1467C43v64Ev();
extern void _ZN7S1467C43v65Ev();
extern void _ZN7S1467C43v66Ev();
extern void _ZN7S1467C43v67Ev();
extern void _ZN7S1467C43v68Ev();
static  VTBL_ENTRY vtc_S1467C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1467C4[0]),
  (VTBL_ENTRY)&_ZN7S1467C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1467C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v68Ev,
};
extern VTBL_ENTRY _ZTI7S1467C4[];
extern  VTBL_ENTRY _ZTV7S1467C4[];
Class_Descriptor cd_S1467C4 = {  "S1467C4", // class name
  0,0,//no base classes
  &(vtc_S1467C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1467C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1467C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1467C3  : S1467C4 {
  void *s1467c3f0;
  ::S273C7_nt s1467c3f1;
  int s1467c3f2[5];
  unsigned int s1467c3f3:1;
  unsigned int s1467c3f4:1;
  unsigned int s1467c3f5:1;
  unsigned int s1467c3f6:1;
  unsigned int s1467c3f7:1;
  ::S273C21 s1467c3f8;
  ::S273C17 s1467c3f9;
  unsigned int s1467c3f10:1;
  int s1467c3f11[2];
  void *s1467c3f12;
  int s1467c3f13[3];
  virtual  ~S1467C3(); // _ZN7S1467C3D1Ev
  virtual void  v69(); // _ZN7S1467C33v69Ev
  virtual void  v70(); // _ZN7S1467C33v70Ev
  virtual void  v71(); // _ZN7S1467C33v71Ev
  virtual void  v72(); // _ZN7S1467C33v72Ev
  virtual void  v73(); // _ZN7S1467C33v73Ev
  virtual void  v74(); // _ZN7S1467C33v74Ev
  virtual void  v75(); // _ZN7S1467C33v75Ev
  virtual void  v76(); // _ZN7S1467C33v76Ev
  virtual void  v77(); // _ZN7S1467C33v77Ev
  virtual void  v78(); // _ZN7S1467C33v78Ev
  virtual void  v79(); // _ZN7S1467C33v79Ev
  virtual void  v80(); // _ZN7S1467C33v80Ev
  virtual void  v81(); // _ZN7S1467C33v81Ev
  S1467C3(); // tgen
};
//SIG(-1 S1467C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1467C3 ::~S1467C3(){ note_dtor("S1467C3", this);}
void  S1467C3 ::v69(){vfunc_called(this, "_ZN7S1467C33v69Ev");}
void  S1467C3 ::v70(){vfunc_called(this, "_ZN7S1467C33v70Ev");}
void  S1467C3 ::v71(){vfunc_called(this, "_ZN7S1467C33v71Ev");}
void  S1467C3 ::v72(){vfunc_called(this, "_ZN7S1467C33v72Ev");}
void  S1467C3 ::v73(){vfunc_called(this, "_ZN7S1467C33v73Ev");}
void  S1467C3 ::v74(){vfunc_called(this, "_ZN7S1467C33v74Ev");}
void  S1467C3 ::v75(){vfunc_called(this, "_ZN7S1467C33v75Ev");}
void  S1467C3 ::v76(){vfunc_called(this, "_ZN7S1467C33v76Ev");}
void  S1467C3 ::v77(){vfunc_called(this, "_ZN7S1467C33v77Ev");}
void  S1467C3 ::v78(){vfunc_called(this, "_ZN7S1467C33v78Ev");}
void  S1467C3 ::v79(){vfunc_called(this, "_ZN7S1467C33v79Ev");}
void  S1467C3 ::v80(){vfunc_called(this, "_ZN7S1467C33v80Ev");}
void  S1467C3 ::v81(){vfunc_called(this, "_ZN7S1467C33v81Ev");}
S1467C3 ::S1467C3(){ note_ctor("S1467C3", this);} // tgen

static void Test_S1467C3()
{
  extern Class_Descriptor cd_S1467C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1467C3, buf);
    S1467C3 *dp, &lv = *(dp=new (buf) S1467C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1467C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1467C3)");
    check_base_class_offset(lv, (S1467C4*), 0, "S1467C3");
    check_field_offset(lv, s1467c3f0, ABISELECT(96,60), "S1467C3.s1467c3f0");
    check_field_offset(lv, s1467c3f1, ABISELECT(104,64), "S1467C3.s1467c3f1");
    check_field_offset(lv, s1467c3f2, ABISELECT(112,72), "S1467C3.s1467c3f2");
    set_bf_and_test(lv, s1467c3f3, ABISELECT(132,92), 0, 1, 1, "S1467C3");
    set_bf_and_test(lv, s1467c3f4, ABISELECT(132,92), 1, 1, 1, "S1467C3");
    set_bf_and_test(lv, s1467c3f5, ABISELECT(132,92), 2, 1, 1, "S1467C3");
    set_bf_and_test(lv, s1467c3f6, ABISELECT(132,92), 3, 1, 1, "S1467C3");
    set_bf_and_test(lv, s1467c3f7, ABISELECT(132,92), 4, 1, 1, "S1467C3");
    check_field_offset(lv, s1467c3f8, ABISELECT(136,96), "S1467C3.s1467c3f8");
    check_field_offset(lv, s1467c3f9, ABISELECT(152,108), "S1467C3.s1467c3f9");
    set_bf_and_test(lv, s1467c3f10, ABISELECT(168,120), 0, 1, 1, "S1467C3");
    check_field_offset(lv, s1467c3f11, ABISELECT(172,124), "S1467C3.s1467c3f11");
    check_field_offset(lv, s1467c3f12, ABISELECT(184,132), "S1467C3.s1467c3f12");
    check_field_offset(lv, s1467c3f13, ABISELECT(192,136), "S1467C3.s1467c3f13");
    test_class_info(&lv, &cd_S1467C3);
    dp->~S1467C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1467C3(Test_S1467C3, "S1467C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1467C3C1Ev();
extern void _ZN7S1467C3D1Ev();
Name_Map name_map_S1467C3[] = {
  NSPAIR(_ZN7S1467C3C1Ev),
  NSPAIR(_ZN7S1467C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1467C4;
extern VTBL_ENTRY _ZTI7S1467C4[];
extern  VTBL_ENTRY _ZTV7S1467C4[];
static Base_Class bases_S1467C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1467C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1467C3[];
extern void _ZN7S1467C3D1Ev();
extern void _ZN7S1467C3D0Ev();
extern void _ZN7S1467C42v5Ev();
extern void _ZN7S1467C42v6Ev();
extern void _ZN7S1467C42v7Ev();
extern void _ZN7S1467C42v8Ev();
extern void _ZN7S1467C42v9Ev();
extern void _ZN7S1467C43v10Ev();
extern void _ZN7S1467C43v11Ev();
extern void _ZN7S1467C43v12Ev();
extern void _ZN7S1467C43v13Ev();
extern void _ZN7S1467C43v14Ev();
extern void _ZN7S1467C43v15Ev();
extern void _ZN7S1467C43v16Ev();
extern void _ZN7S1467C43v17Ev();
extern void _ZN7S1467C43v18Ev();
extern void _ZN7S1467C43v19Ev();
extern void _ZN7S1467C43v20Ev();
extern void _ZN7S1467C43v21Ev();
extern void _ZN7S1467C43v22Ev();
extern void _ZN7S1467C43v23Ev();
extern void _ZN7S1467C43v24Ev();
extern void _ZN7S1467C43v25Ev();
extern void _ZN7S1467C43v26Ev();
extern void _ZN7S1467C43v27Ev();
extern void _ZN7S1467C43v28Ev();
extern void _ZN7S1467C43v29Ev();
extern void _ZN7S1467C43v30Ev();
extern void _ZN7S1467C43v31Ev();
extern void _ZN7S1467C43v32Ev();
extern void _ZN7S1467C43v33Ev();
extern void _ZN7S1467C43v34Ev();
extern void _ZN7S1467C43v35Ev();
extern void _ZN7S1467C43v36Ev();
extern void _ZN7S1467C43v37Ev();
extern void _ZN7S1467C43v38Ev();
extern void _ZN7S1467C43v39Ev();
extern void _ZN7S1467C43v40Ev();
extern void _ZN7S1467C43v41Ev();
extern void _ZN7S1467C43v42Ev();
extern void _ZN7S1467C43v43Ev();
extern void _ZN7S1467C43v44Ev();
extern void _ZN7S1467C43v45Ev();
extern void _ZN7S1467C43v46Ev();
extern void _ZN7S1467C43v47Ev();
extern void _ZN7S1467C43v48Ev();
extern void _ZN7S1467C43v49Ev();
extern void _ZN7S1467C43v50Ev();
extern void _ZN7S1467C43v51Ev();
extern void _ZN7S1467C43v52Ev();
extern void _ZN7S1467C43v53Ev();
extern void _ZN7S1467C43v54Ev();
extern void _ZN7S1467C43v55Ev();
extern void _ZN7S1467C43v56Ev();
extern void _ZN7S1467C43v57Ev();
extern void _ZN7S1467C43v58Ev();
extern void _ZN7S1467C43v59Ev();
extern void _ZN7S1467C43v60Ev();
extern void _ZN7S1467C43v61Ev();
extern void _ZN7S1467C43v62Ev();
extern void _ZN7S1467C43v63Ev();
extern void _ZN7S1467C43v64Ev();
extern void _ZN7S1467C43v65Ev();
extern void _ZN7S1467C43v66Ev();
extern void _ZN7S1467C43v67Ev();
extern void _ZN7S1467C43v68Ev();
extern void _ZN7S1467C33v69Ev();
extern void _ZN7S1467C33v70Ev();
extern void _ZN7S1467C33v71Ev();
extern void _ZN7S1467C33v72Ev();
extern void _ZN7S1467C33v73Ev();
extern void _ZN7S1467C33v74Ev();
extern void _ZN7S1467C33v75Ev();
extern void _ZN7S1467C33v76Ev();
extern void _ZN7S1467C33v77Ev();
extern void _ZN7S1467C33v78Ev();
extern void _ZN7S1467C33v79Ev();
extern void _ZN7S1467C33v80Ev();
extern void _ZN7S1467C33v81Ev();
static  VTBL_ENTRY vtc_S1467C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1467C3[0]),
  (VTBL_ENTRY)&_ZN7S1467C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1467C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v81Ev,
};
extern VTBL_ENTRY _ZTI7S1467C3[];
extern  VTBL_ENTRY _ZTV7S1467C3[];
Class_Descriptor cd_S1467C3 = {  "S1467C3", // class name
  bases_S1467C3, 1,
  &(vtc_S1467C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1467C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1467C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1467C2  : S1467C3 {
  unsigned int s1467c2f0:1;
  unsigned int s1467c2f1:1;
  unsigned int s1467c2f2:1;
  unsigned int s1467c2f3:1;
  ::S664C12_nt s1467c2f4;
  char s1467c2f5[2];
  ::S273C7_nt s1467c2f6;
  ::S632C13 s1467c2f7;
  ::S273C7_nt s1467c2f8;
  virtual  ~S1467C2(); // _ZN7S1467C2D1Ev
  virtual void  v82(); // _ZN7S1467C23v82Ev
  virtual void  v83(); // _ZN7S1467C23v83Ev
  virtual void  v84(); // _ZN7S1467C23v84Ev
  virtual void  v85(); // _ZN7S1467C23v85Ev
  virtual void  v86(); // _ZN7S1467C23v86Ev
  virtual void  v87(); // _ZN7S1467C23v87Ev
  virtual void  v88(); // _ZN7S1467C23v88Ev
  S1467C2(); // tgen
};
//SIG(-1 S1467C2) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S1467C2 ::~S1467C2(){ note_dtor("S1467C2", this);}
void  S1467C2 ::v82(){vfunc_called(this, "_ZN7S1467C23v82Ev");}
void  S1467C2 ::v83(){vfunc_called(this, "_ZN7S1467C23v83Ev");}
void  S1467C2 ::v84(){vfunc_called(this, "_ZN7S1467C23v84Ev");}
void  S1467C2 ::v85(){vfunc_called(this, "_ZN7S1467C23v85Ev");}
void  S1467C2 ::v86(){vfunc_called(this, "_ZN7S1467C23v86Ev");}
void  S1467C2 ::v87(){vfunc_called(this, "_ZN7S1467C23v87Ev");}
void  S1467C2 ::v88(){vfunc_called(this, "_ZN7S1467C23v88Ev");}
S1467C2 ::S1467C2(){ note_ctor("S1467C2", this);} // tgen

static void Test_S1467C2()
{
  extern Class_Descriptor cd_S1467C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1467C2, buf);
    S1467C2 *dp, &lv = *(dp=new (buf) S1467C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1467C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1467C2)");
    check_base_class_offset(lv, (S1467C4*)(S1467C3*), 0, "S1467C2");
    check_base_class_offset(lv, (S1467C3*), 0, "S1467C2");
    set_bf_and_test(lv, s1467c2f0, ABISELECT(204,148), 0, 1, 1, "S1467C2");
    set_bf_and_test(lv, s1467c2f1, ABISELECT(204,148), 1, 1, 1, "S1467C2");
    set_bf_and_test(lv, s1467c2f2, ABISELECT(204,148), 2, 1, 1, "S1467C2");
    set_bf_and_test(lv, s1467c2f3, ABISELECT(204,148), 3, 1, 1, "S1467C2");
    check_field_offset(lv, s1467c2f4, ABISELECT(208,152), "S1467C2.s1467c2f4");
    check_field_offset(lv, s1467c2f5, ABISELECT(220,164), "S1467C2.s1467c2f5");
    check_field_offset(lv, s1467c2f6, ABISELECT(224,168), "S1467C2.s1467c2f6");
    check_field_offset(lv, s1467c2f7, ABISELECT(232,176), "S1467C2.s1467c2f7");
    check_field_offset(lv, s1467c2f8, ABISELECT(244,188), "S1467C2.s1467c2f8");
    test_class_info(&lv, &cd_S1467C2);
    dp->~S1467C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1467C2(Test_S1467C2, "S1467C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1467C2C1Ev();
extern void _ZN7S1467C2D1Ev();
Name_Map name_map_S1467C2[] = {
  NSPAIR(_ZN7S1467C2C1Ev),
  NSPAIR(_ZN7S1467C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1467C4;
extern VTBL_ENTRY _ZTI7S1467C4[];
extern  VTBL_ENTRY _ZTV7S1467C4[];
extern Class_Descriptor cd_S1467C3;
extern VTBL_ENTRY _ZTI7S1467C3[];
extern  VTBL_ENTRY _ZTV7S1467C3[];
static Base_Class bases_S1467C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1467C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1467C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1467C2[];
extern void _ZN7S1467C2D1Ev();
extern void _ZN7S1467C2D0Ev();
extern void _ZN7S1467C42v5Ev();
extern void _ZN7S1467C42v6Ev();
extern void _ZN7S1467C42v7Ev();
extern void _ZN7S1467C42v8Ev();
extern void _ZN7S1467C42v9Ev();
extern void _ZN7S1467C43v10Ev();
extern void _ZN7S1467C43v11Ev();
extern void _ZN7S1467C43v12Ev();
extern void _ZN7S1467C43v13Ev();
extern void _ZN7S1467C43v14Ev();
extern void _ZN7S1467C43v15Ev();
extern void _ZN7S1467C43v16Ev();
extern void _ZN7S1467C43v17Ev();
extern void _ZN7S1467C43v18Ev();
extern void _ZN7S1467C43v19Ev();
extern void _ZN7S1467C43v20Ev();
extern void _ZN7S1467C43v21Ev();
extern void _ZN7S1467C43v22Ev();
extern void _ZN7S1467C43v23Ev();
extern void _ZN7S1467C43v24Ev();
extern void _ZN7S1467C43v25Ev();
extern void _ZN7S1467C43v26Ev();
extern void _ZN7S1467C43v27Ev();
extern void _ZN7S1467C43v28Ev();
extern void _ZN7S1467C43v29Ev();
extern void _ZN7S1467C43v30Ev();
extern void _ZN7S1467C43v31Ev();
extern void _ZN7S1467C43v32Ev();
extern void _ZN7S1467C43v33Ev();
extern void _ZN7S1467C43v34Ev();
extern void _ZN7S1467C43v35Ev();
extern void _ZN7S1467C43v36Ev();
extern void _ZN7S1467C43v37Ev();
extern void _ZN7S1467C43v38Ev();
extern void _ZN7S1467C43v39Ev();
extern void _ZN7S1467C43v40Ev();
extern void _ZN7S1467C43v41Ev();
extern void _ZN7S1467C43v42Ev();
extern void _ZN7S1467C43v43Ev();
extern void _ZN7S1467C43v44Ev();
extern void _ZN7S1467C43v45Ev();
extern void _ZN7S1467C43v46Ev();
extern void _ZN7S1467C43v47Ev();
extern void _ZN7S1467C43v48Ev();
extern void _ZN7S1467C43v49Ev();
extern void _ZN7S1467C43v50Ev();
extern void _ZN7S1467C43v51Ev();
extern void _ZN7S1467C43v52Ev();
extern void _ZN7S1467C43v53Ev();
extern void _ZN7S1467C43v54Ev();
extern void _ZN7S1467C43v55Ev();
extern void _ZN7S1467C43v56Ev();
extern void _ZN7S1467C43v57Ev();
extern void _ZN7S1467C43v58Ev();
extern void _ZN7S1467C43v59Ev();
extern void _ZN7S1467C43v60Ev();
extern void _ZN7S1467C43v61Ev();
extern void _ZN7S1467C43v62Ev();
extern void _ZN7S1467C43v63Ev();
extern void _ZN7S1467C43v64Ev();
extern void _ZN7S1467C43v65Ev();
extern void _ZN7S1467C43v66Ev();
extern void _ZN7S1467C43v67Ev();
extern void _ZN7S1467C43v68Ev();
extern void _ZN7S1467C33v69Ev();
extern void _ZN7S1467C33v70Ev();
extern void _ZN7S1467C33v71Ev();
extern void _ZN7S1467C33v72Ev();
extern void _ZN7S1467C33v73Ev();
extern void _ZN7S1467C33v74Ev();
extern void _ZN7S1467C33v75Ev();
extern void _ZN7S1467C33v76Ev();
extern void _ZN7S1467C33v77Ev();
extern void _ZN7S1467C33v78Ev();
extern void _ZN7S1467C33v79Ev();
extern void _ZN7S1467C33v80Ev();
extern void _ZN7S1467C33v81Ev();
extern void _ZN7S1467C23v82Ev();
extern void _ZN7S1467C23v83Ev();
extern void _ZN7S1467C23v84Ev();
extern void _ZN7S1467C23v85Ev();
extern void _ZN7S1467C23v86Ev();
extern void _ZN7S1467C23v87Ev();
extern void _ZN7S1467C23v88Ev();
static  VTBL_ENTRY vtc_S1467C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1467C2[0]),
  (VTBL_ENTRY)&_ZN7S1467C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1467C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1467C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1467C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1467C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1467C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1467C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1467C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1467C23v88Ev,
};
extern VTBL_ENTRY _ZTI7S1467C2[];
extern  VTBL_ENTRY _ZTV7S1467C2[];
Class_Descriptor cd_S1467C2 = {  "S1467C2", // class name
  bases_S1467C2, 2,
  &(vtc_S1467C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1467C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1467C2),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1467C1  : S1467C2 {
  ::S273C7_nt s1467c1f0;
  ::S273C7_nt s1467c1f1;
  ::S273C7_nt s1467c1f2;
  ::S273C7_nt s1467c1f3;
  int s1467c1f4;
  unsigned int s1467c1f5:1;
  int s1467c1f6[8];
  unsigned int s1467c1f7:1;
  virtual  ~S1467C1(); // _ZN7S1467C1D1Ev
  virtual void  v1(); // _ZN7S1467C12v1Ev
  virtual void  v2(); // _ZN7S1467C12v2Ev
  virtual void  v3(); // _ZN7S1467C12v3Ev
  virtual void  v4(); // _ZN7S1467C12v4Ev
  S1467C1(); // tgen
};
//SIG(1 S1467C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v82 v83 v84 v85 v86 v87 v88 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 v4 FC5 FC5 FC5 FC5 Fi Fi:1 Fi[8] Fi:1}


 S1467C1 ::~S1467C1(){ note_dtor("S1467C1", this);}
void  S1467C1 ::v1(){vfunc_called(this, "_ZN7S1467C12v1Ev");}
void  S1467C1 ::v2(){vfunc_called(this, "_ZN7S1467C12v2Ev");}
void  S1467C1 ::v3(){vfunc_called(this, "_ZN7S1467C12v3Ev");}
void  S1467C1 ::v4(){vfunc_called(this, "_ZN7S1467C12v4Ev");}
S1467C1 ::S1467C1(){ note_ctor("S1467C1", this);} // tgen

static void Test_S1467C1()
{
  extern Class_Descriptor cd_S1467C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,69)];
    init_test(&cd_S1467C1, buf);
    S1467C1 *dp, &lv = *(dp=new (buf) S1467C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,272), "sizeof(S1467C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1467C1)");
    check_base_class_offset(lv, (S1467C4*)(S1467C3*)(S1467C2*), 0, "S1467C1");
    check_base_class_offset(lv, (S1467C3*)(S1467C2*), 0, "S1467C1");
    check_base_class_offset(lv, (S1467C2*), 0, "S1467C1");
    check_field_offset(lv, s1467c1f0, ABISELECT(252,196), "S1467C1.s1467c1f0");
    check_field_offset(lv, s1467c1f1, ABISELECT(260,204), "S1467C1.s1467c1f1");
    check_field_offset(lv, s1467c1f2, ABISELECT(268,212), "S1467C1.s1467c1f2");
    check_field_offset(lv, s1467c1f3, ABISELECT(276,220), "S1467C1.s1467c1f3");
    check_field_offset(lv, s1467c1f4, ABISELECT(284,228), "S1467C1.s1467c1f4");
    set_bf_and_test(lv, s1467c1f5, ABISELECT(288,232), 0, 1, 1, "S1467C1");
    check_field_offset(lv, s1467c1f6, ABISELECT(292,236), "S1467C1.s1467c1f6");
    set_bf_and_test(lv, s1467c1f7, ABISELECT(324,268), 0, 1, 1, "S1467C1");
    test_class_info(&lv, &cd_S1467C1);
    dp->~S1467C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1467C1(Test_S1467C1, "S1467C1", ABISELECT(328,272));

#else // __cplusplus

extern void _ZN7S1467C1C1Ev();
extern void _ZN7S1467C1D1Ev();
Name_Map name_map_S1467C1[] = {
  NSPAIR(_ZN7S1467C1C1Ev),
  NSPAIR(_ZN7S1467C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1467C4;
extern VTBL_ENTRY _ZTI7S1467C4[];
extern  VTBL_ENTRY _ZTV7S1467C4[];
extern Class_Descriptor cd_S1467C3;
extern VTBL_ENTRY _ZTI7S1467C3[];
extern  VTBL_ENTRY _ZTV7S1467C3[];
extern Class_Descriptor cd_S1467C2;
extern VTBL_ENTRY _ZTI7S1467C2[];
extern  VTBL_ENTRY _ZTV7S1467C2[];
static Base_Class bases_S1467C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1467C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1467C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1467C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1467C1[];
extern void _ZN7S1467C1D1Ev();
extern void _ZN7S1467C1D0Ev();
extern void _ZN7S1467C42v5Ev();
extern void _ZN7S1467C42v6Ev();
extern void _ZN7S1467C42v7Ev();
extern void _ZN7S1467C42v8Ev();
extern void _ZN7S1467C42v9Ev();
extern void _ZN7S1467C43v10Ev();
extern void _ZN7S1467C43v11Ev();
extern void _ZN7S1467C43v12Ev();
extern void _ZN7S1467C43v13Ev();
extern void _ZN7S1467C43v14Ev();
extern void _ZN7S1467C43v15Ev();
extern void _ZN7S1467C43v16Ev();
extern void _ZN7S1467C43v17Ev();
extern void _ZN7S1467C43v18Ev();
extern void _ZN7S1467C43v19Ev();
extern void _ZN7S1467C43v20Ev();
extern void _ZN7S1467C43v21Ev();
extern void _ZN7S1467C43v22Ev();
extern void _ZN7S1467C43v23Ev();
extern void _ZN7S1467C43v24Ev();
extern void _ZN7S1467C43v25Ev();
extern void _ZN7S1467C43v26Ev();
extern void _ZN7S1467C43v27Ev();
extern void _ZN7S1467C43v28Ev();
extern void _ZN7S1467C43v29Ev();
extern void _ZN7S1467C43v30Ev();
extern void _ZN7S1467C43v31Ev();
extern void _ZN7S1467C43v32Ev();
extern void _ZN7S1467C43v33Ev();
extern void _ZN7S1467C43v34Ev();
extern void _ZN7S1467C43v35Ev();
extern void _ZN7S1467C43v36Ev();
extern void _ZN7S1467C43v37Ev();
extern void _ZN7S1467C43v38Ev();
extern void _ZN7S1467C43v39Ev();
extern void _ZN7S1467C43v40Ev();
extern void _ZN7S1467C43v41Ev();
extern void _ZN7S1467C43v42Ev();
extern void _ZN7S1467C43v43Ev();
extern void _ZN7S1467C43v44Ev();
extern void _ZN7S1467C43v45Ev();
extern void _ZN7S1467C43v46Ev();
extern void _ZN7S1467C43v47Ev();
extern void _ZN7S1467C43v48Ev();
extern void _ZN7S1467C43v49Ev();
extern void _ZN7S1467C43v50Ev();
extern void _ZN7S1467C43v51Ev();
extern void _ZN7S1467C43v52Ev();
extern void _ZN7S1467C43v53Ev();
extern void _ZN7S1467C43v54Ev();
extern void _ZN7S1467C43v55Ev();
extern void _ZN7S1467C43v56Ev();
extern void _ZN7S1467C43v57Ev();
extern void _ZN7S1467C43v58Ev();
extern void _ZN7S1467C43v59Ev();
extern void _ZN7S1467C43v60Ev();
extern void _ZN7S1467C43v61Ev();
extern void _ZN7S1467C43v62Ev();
extern void _ZN7S1467C43v63Ev();
extern void _ZN7S1467C43v64Ev();
extern void _ZN7S1467C43v65Ev();
extern void _ZN7S1467C43v66Ev();
extern void _ZN7S1467C43v67Ev();
extern void _ZN7S1467C43v68Ev();
extern void _ZN7S1467C33v69Ev();
extern void _ZN7S1467C33v70Ev();
extern void _ZN7S1467C33v71Ev();
extern void _ZN7S1467C33v72Ev();
extern void _ZN7S1467C33v73Ev();
extern void _ZN7S1467C33v74Ev();
extern void _ZN7S1467C33v75Ev();
extern void _ZN7S1467C33v76Ev();
extern void _ZN7S1467C33v77Ev();
extern void _ZN7S1467C33v78Ev();
extern void _ZN7S1467C33v79Ev();
extern void _ZN7S1467C33v80Ev();
extern void _ZN7S1467C33v81Ev();
extern void _ZN7S1467C23v82Ev();
extern void _ZN7S1467C23v83Ev();
extern void _ZN7S1467C23v84Ev();
extern void _ZN7S1467C23v85Ev();
extern void _ZN7S1467C23v86Ev();
extern void _ZN7S1467C23v87Ev();
extern void _ZN7S1467C23v88Ev();
extern void _ZN7S1467C12v1Ev();
extern void _ZN7S1467C12v2Ev();
extern void _ZN7S1467C12v3Ev();
extern void _ZN7S1467C12v4Ev();
static  VTBL_ENTRY vtc_S1467C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1467C1[0]),
  (VTBL_ENTRY)&_ZN7S1467C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1467C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1467C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1467C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1467C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1467C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1467C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1467C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1467C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1467C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1467C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1467C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1467C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1467C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1467C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1467C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1467C1[];
extern  VTBL_ENTRY _ZTV7S1467C1[];
Class_Descriptor cd_S1467C1 = {  "S1467C1", // class name
  bases_S1467C1, 3,
  &(vtc_S1467C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,272), // object size
  NSPAIRA(_ZTI7S1467C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1467C1),92, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3432C3  {
  int s3432c3f0;
  __tsi64 s3432c3f1;
  void *s3432c3f2[4];
  int s3432c3f3[2];
  void *s3432c3f4;
  ::S273C7_nt s3432c3f5;
  void *s3432c3f6[2];
  virtual  ~S3432C3(); // _ZN7S3432C3D1Ev
  virtual void  v8(); // _ZN7S3432C32v8Ev
  virtual void  v9(); // _ZN7S3432C32v9Ev
  virtual void  v10(); // _ZN7S3432C33v10Ev
  virtual void  v11(); // _ZN7S3432C33v11Ev
  virtual void  v12(); // _ZN7S3432C33v12Ev
  virtual void  v13(); // _ZN7S3432C33v13Ev
  virtual void  v14(); // _ZN7S3432C33v14Ev
  virtual void  v15(); // _ZN7S3432C33v15Ev
  virtual void  v16(); // _ZN7S3432C33v16Ev
  virtual void  v17(); // _ZN7S3432C33v17Ev
  virtual void  v18(); // _ZN7S3432C33v18Ev
  virtual void  v19(); // _ZN7S3432C33v19Ev
  virtual void  v20(); // _ZN7S3432C33v20Ev
  virtual void  v21(); // _ZN7S3432C33v21Ev
  virtual void  v22(); // _ZN7S3432C33v22Ev
  virtual void  v23(); // _ZN7S3432C33v23Ev
  virtual void  v24(); // _ZN7S3432C33v24Ev
  virtual void  v25(); // _ZN7S3432C33v25Ev
  virtual void  v26(); // _ZN7S3432C33v26Ev
  virtual void  v27(); // _ZN7S3432C33v27Ev
  virtual void  v28(); // _ZN7S3432C33v28Ev
  virtual void  v29(); // _ZN7S3432C33v29Ev
  virtual void  v30(); // _ZN7S3432C33v30Ev
  virtual void  v31(); // _ZN7S3432C33v31Ev
  virtual void  v32(); // _ZN7S3432C33v32Ev
  virtual void  v33(); // _ZN7S3432C33v33Ev
  virtual void  v34(); // _ZN7S3432C33v34Ev
  virtual void  v35(); // _ZN7S3432C33v35Ev
  virtual void  v36(); // _ZN7S3432C33v36Ev
  virtual void  v37(); // _ZN7S3432C33v37Ev
  virtual void  v38(); // _ZN7S3432C33v38Ev
  virtual void  v39(); // _ZN7S3432C33v39Ev
  virtual void  v40(); // _ZN7S3432C33v40Ev
  virtual void  v41(); // _ZN7S3432C33v41Ev
  virtual void  v42(); // _ZN7S3432C33v42Ev
  virtual void  v43(); // _ZN7S3432C33v43Ev
  virtual void  v44(); // _ZN7S3432C33v44Ev
  virtual void  v45(); // _ZN7S3432C33v45Ev
  virtual void  v46(); // _ZN7S3432C33v46Ev
  virtual void  v47(); // _ZN7S3432C33v47Ev
  virtual void  v48(); // _ZN7S3432C33v48Ev
  virtual void  v49(); // _ZN7S3432C33v49Ev
  virtual void  v50(); // _ZN7S3432C33v50Ev
  virtual void  v51(); // _ZN7S3432C33v51Ev
  virtual void  v52(); // _ZN7S3432C33v52Ev
  virtual void  v53(); // _ZN7S3432C33v53Ev
  virtual void  v54(); // _ZN7S3432C33v54Ev
  virtual void  v55(); // _ZN7S3432C33v55Ev
  virtual void  v56(); // _ZN7S3432C33v56Ev
  virtual void  v57(); // _ZN7S3432C33v57Ev
  virtual void  v58(); // _ZN7S3432C33v58Ev
  virtual void  v59(); // _ZN7S3432C33v59Ev
  virtual void  v60(); // _ZN7S3432C33v60Ev
  virtual void  v61(); // _ZN7S3432C33v61Ev
  virtual void  v62(); // _ZN7S3432C33v62Ev
  virtual void  v63(); // _ZN7S3432C33v63Ev
  virtual void  v64(); // _ZN7S3432C33v64Ev
  virtual void  v65(); // _ZN7S3432C33v65Ev
  virtual void  v66(); // _ZN7S3432C33v66Ev
  virtual void  v67(); // _ZN7S3432C33v67Ev
  virtual void  v68(); // _ZN7S3432C33v68Ev
  virtual void  v69(); // _ZN7S3432C33v69Ev
  virtual void  v70(); // _ZN7S3432C33v70Ev
  virtual void  v71(); // _ZN7S3432C33v71Ev
  S3432C3(); // tgen
};
//SIG(-1 S3432C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3432C3 ::~S3432C3(){ note_dtor("S3432C3", this);}
void  S3432C3 ::v8(){vfunc_called(this, "_ZN7S3432C32v8Ev");}
void  S3432C3 ::v9(){vfunc_called(this, "_ZN7S3432C32v9Ev");}
void  S3432C3 ::v10(){vfunc_called(this, "_ZN7S3432C33v10Ev");}
void  S3432C3 ::v11(){vfunc_called(this, "_ZN7S3432C33v11Ev");}
void  S3432C3 ::v12(){vfunc_called(this, "_ZN7S3432C33v12Ev");}
void  S3432C3 ::v13(){vfunc_called(this, "_ZN7S3432C33v13Ev");}
void  S3432C3 ::v14(){vfunc_called(this, "_ZN7S3432C33v14Ev");}
void  S3432C3 ::v15(){vfunc_called(this, "_ZN7S3432C33v15Ev");}
void  S3432C3 ::v16(){vfunc_called(this, "_ZN7S3432C33v16Ev");}
void  S3432C3 ::v17(){vfunc_called(this, "_ZN7S3432C33v17Ev");}
void  S3432C3 ::v18(){vfunc_called(this, "_ZN7S3432C33v18Ev");}
void  S3432C3 ::v19(){vfunc_called(this, "_ZN7S3432C33v19Ev");}
void  S3432C3 ::v20(){vfunc_called(this, "_ZN7S3432C33v20Ev");}
void  S3432C3 ::v21(){vfunc_called(this, "_ZN7S3432C33v21Ev");}
void  S3432C3 ::v22(){vfunc_called(this, "_ZN7S3432C33v22Ev");}
void  S3432C3 ::v23(){vfunc_called(this, "_ZN7S3432C33v23Ev");}
void  S3432C3 ::v24(){vfunc_called(this, "_ZN7S3432C33v24Ev");}
void  S3432C3 ::v25(){vfunc_called(this, "_ZN7S3432C33v25Ev");}
void  S3432C3 ::v26(){vfunc_called(this, "_ZN7S3432C33v26Ev");}
void  S3432C3 ::v27(){vfunc_called(this, "_ZN7S3432C33v27Ev");}
void  S3432C3 ::v28(){vfunc_called(this, "_ZN7S3432C33v28Ev");}
void  S3432C3 ::v29(){vfunc_called(this, "_ZN7S3432C33v29Ev");}
void  S3432C3 ::v30(){vfunc_called(this, "_ZN7S3432C33v30Ev");}
void  S3432C3 ::v31(){vfunc_called(this, "_ZN7S3432C33v31Ev");}
void  S3432C3 ::v32(){vfunc_called(this, "_ZN7S3432C33v32Ev");}
void  S3432C3 ::v33(){vfunc_called(this, "_ZN7S3432C33v33Ev");}
void  S3432C3 ::v34(){vfunc_called(this, "_ZN7S3432C33v34Ev");}
void  S3432C3 ::v35(){vfunc_called(this, "_ZN7S3432C33v35Ev");}
void  S3432C3 ::v36(){vfunc_called(this, "_ZN7S3432C33v36Ev");}
void  S3432C3 ::v37(){vfunc_called(this, "_ZN7S3432C33v37Ev");}
void  S3432C3 ::v38(){vfunc_called(this, "_ZN7S3432C33v38Ev");}
void  S3432C3 ::v39(){vfunc_called(this, "_ZN7S3432C33v39Ev");}
void  S3432C3 ::v40(){vfunc_called(this, "_ZN7S3432C33v40Ev");}
void  S3432C3 ::v41(){vfunc_called(this, "_ZN7S3432C33v41Ev");}
void  S3432C3 ::v42(){vfunc_called(this, "_ZN7S3432C33v42Ev");}
void  S3432C3 ::v43(){vfunc_called(this, "_ZN7S3432C33v43Ev");}
void  S3432C3 ::v44(){vfunc_called(this, "_ZN7S3432C33v44Ev");}
void  S3432C3 ::v45(){vfunc_called(this, "_ZN7S3432C33v45Ev");}
void  S3432C3 ::v46(){vfunc_called(this, "_ZN7S3432C33v46Ev");}
void  S3432C3 ::v47(){vfunc_called(this, "_ZN7S3432C33v47Ev");}
void  S3432C3 ::v48(){vfunc_called(this, "_ZN7S3432C33v48Ev");}
void  S3432C3 ::v49(){vfunc_called(this, "_ZN7S3432C33v49Ev");}
void  S3432C3 ::v50(){vfunc_called(this, "_ZN7S3432C33v50Ev");}
void  S3432C3 ::v51(){vfunc_called(this, "_ZN7S3432C33v51Ev");}
void  S3432C3 ::v52(){vfunc_called(this, "_ZN7S3432C33v52Ev");}
void  S3432C3 ::v53(){vfunc_called(this, "_ZN7S3432C33v53Ev");}
void  S3432C3 ::v54(){vfunc_called(this, "_ZN7S3432C33v54Ev");}
void  S3432C3 ::v55(){vfunc_called(this, "_ZN7S3432C33v55Ev");}
void  S3432C3 ::v56(){vfunc_called(this, "_ZN7S3432C33v56Ev");}
void  S3432C3 ::v57(){vfunc_called(this, "_ZN7S3432C33v57Ev");}
void  S3432C3 ::v58(){vfunc_called(this, "_ZN7S3432C33v58Ev");}
void  S3432C3 ::v59(){vfunc_called(this, "_ZN7S3432C33v59Ev");}
void  S3432C3 ::v60(){vfunc_called(this, "_ZN7S3432C33v60Ev");}
void  S3432C3 ::v61(){vfunc_called(this, "_ZN7S3432C33v61Ev");}
void  S3432C3 ::v62(){vfunc_called(this, "_ZN7S3432C33v62Ev");}
void  S3432C3 ::v63(){vfunc_called(this, "_ZN7S3432C33v63Ev");}
void  S3432C3 ::v64(){vfunc_called(this, "_ZN7S3432C33v64Ev");}
void  S3432C3 ::v65(){vfunc_called(this, "_ZN7S3432C33v65Ev");}
void  S3432C3 ::v66(){vfunc_called(this, "_ZN7S3432C33v66Ev");}
void  S3432C3 ::v67(){vfunc_called(this, "_ZN7S3432C33v67Ev");}
void  S3432C3 ::v68(){vfunc_called(this, "_ZN7S3432C33v68Ev");}
void  S3432C3 ::v69(){vfunc_called(this, "_ZN7S3432C33v69Ev");}
void  S3432C3 ::v70(){vfunc_called(this, "_ZN7S3432C33v70Ev");}
void  S3432C3 ::v71(){vfunc_called(this, "_ZN7S3432C33v71Ev");}
S3432C3 ::S3432C3(){ note_ctor("S3432C3", this);} // tgen

static void Test_S3432C3()
{
  extern Class_Descriptor cd_S3432C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3432C3, buf);
    S3432C3 *dp, &lv = *(dp=new (buf) S3432C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3432C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3432C3)");
    check_field_offset(lv, s3432c3f0, ABISELECT(8,4), "S3432C3.s3432c3f0");
    check_field_offset(lv, s3432c3f1, ABISELECT(16,8), "S3432C3.s3432c3f1");
    check_field_offset(lv, s3432c3f2, ABISELECT(24,16), "S3432C3.s3432c3f2");
    check_field_offset(lv, s3432c3f3, ABISELECT(56,32), "S3432C3.s3432c3f3");
    check_field_offset(lv, s3432c3f4, ABISELECT(64,40), "S3432C3.s3432c3f4");
    check_field_offset(lv, s3432c3f5, ABISELECT(72,44), "S3432C3.s3432c3f5");
    check_field_offset(lv, s3432c3f6, ABISELECT(80,52), "S3432C3.s3432c3f6");
    test_class_info(&lv, &cd_S3432C3);
    dp->~S3432C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3432C3(Test_S3432C3, "S3432C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3432C3C1Ev();
extern void _ZN7S3432C3D1Ev();
Name_Map name_map_S3432C3[] = {
  NSPAIR(_ZN7S3432C3C1Ev),
  NSPAIR(_ZN7S3432C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3432C3[];
extern void _ZN7S3432C3D1Ev();
extern void _ZN7S3432C3D0Ev();
extern void _ZN7S3432C32v8Ev();
extern void _ZN7S3432C32v9Ev();
extern void _ZN7S3432C33v10Ev();
extern void _ZN7S3432C33v11Ev();
extern void _ZN7S3432C33v12Ev();
extern void _ZN7S3432C33v13Ev();
extern void _ZN7S3432C33v14Ev();
extern void _ZN7S3432C33v15Ev();
extern void _ZN7S3432C33v16Ev();
extern void _ZN7S3432C33v17Ev();
extern void _ZN7S3432C33v18Ev();
extern void _ZN7S3432C33v19Ev();
extern void _ZN7S3432C33v20Ev();
extern void _ZN7S3432C33v21Ev();
extern void _ZN7S3432C33v22Ev();
extern void _ZN7S3432C33v23Ev();
extern void _ZN7S3432C33v24Ev();
extern void _ZN7S3432C33v25Ev();
extern void _ZN7S3432C33v26Ev();
extern void _ZN7S3432C33v27Ev();
extern void _ZN7S3432C33v28Ev();
extern void _ZN7S3432C33v29Ev();
extern void _ZN7S3432C33v30Ev();
extern void _ZN7S3432C33v31Ev();
extern void _ZN7S3432C33v32Ev();
extern void _ZN7S3432C33v33Ev();
extern void _ZN7S3432C33v34Ev();
extern void _ZN7S3432C33v35Ev();
extern void _ZN7S3432C33v36Ev();
extern void _ZN7S3432C33v37Ev();
extern void _ZN7S3432C33v38Ev();
extern void _ZN7S3432C33v39Ev();
extern void _ZN7S3432C33v40Ev();
extern void _ZN7S3432C33v41Ev();
extern void _ZN7S3432C33v42Ev();
extern void _ZN7S3432C33v43Ev();
extern void _ZN7S3432C33v44Ev();
extern void _ZN7S3432C33v45Ev();
extern void _ZN7S3432C33v46Ev();
extern void _ZN7S3432C33v47Ev();
extern void _ZN7S3432C33v48Ev();
extern void _ZN7S3432C33v49Ev();
extern void _ZN7S3432C33v50Ev();
extern void _ZN7S3432C33v51Ev();
extern void _ZN7S3432C33v52Ev();
extern void _ZN7S3432C33v53Ev();
extern void _ZN7S3432C33v54Ev();
extern void _ZN7S3432C33v55Ev();
extern void _ZN7S3432C33v56Ev();
extern void _ZN7S3432C33v57Ev();
extern void _ZN7S3432C33v58Ev();
extern void _ZN7S3432C33v59Ev();
extern void _ZN7S3432C33v60Ev();
extern void _ZN7S3432C33v61Ev();
extern void _ZN7S3432C33v62Ev();
extern void _ZN7S3432C33v63Ev();
extern void _ZN7S3432C33v64Ev();
extern void _ZN7S3432C33v65Ev();
extern void _ZN7S3432C33v66Ev();
extern void _ZN7S3432C33v67Ev();
extern void _ZN7S3432C33v68Ev();
extern void _ZN7S3432C33v69Ev();
extern void _ZN7S3432C33v70Ev();
extern void _ZN7S3432C33v71Ev();
static  VTBL_ENTRY vtc_S3432C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3432C3[0]),
  (VTBL_ENTRY)&_ZN7S3432C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3432C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3432C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3432C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v71Ev,
};
extern VTBL_ENTRY _ZTI7S3432C3[];
extern  VTBL_ENTRY _ZTV7S3432C3[];
Class_Descriptor cd_S3432C3 = {  "S3432C3", // class name
  0,0,//no base classes
  &(vtc_S3432C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3432C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3432C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3432C2  : S3432C3 {
  void *s3432c2f0;
  ::S273C7_nt s3432c2f1;
  int s3432c2f2[5];
  unsigned int s3432c2f3:1;
  unsigned int s3432c2f4:1;
  unsigned int s3432c2f5:1;
  unsigned int s3432c2f6:1;
  unsigned int s3432c2f7:1;
  ::S273C21 s3432c2f8;
  ::S273C17 s3432c2f9;
  unsigned int s3432c2f10:1;
  int s3432c2f11[2];
  void *s3432c2f12;
  int s3432c2f13[3];
  virtual  ~S3432C2(); // _ZN7S3432C2D1Ev
  virtual void  v72(); // _ZN7S3432C23v72Ev
  virtual void  v73(); // _ZN7S3432C23v73Ev
  virtual void  v74(); // _ZN7S3432C23v74Ev
  virtual void  v75(); // _ZN7S3432C23v75Ev
  virtual void  v76(); // _ZN7S3432C23v76Ev
  virtual void  v77(); // _ZN7S3432C23v77Ev
  virtual void  v78(); // _ZN7S3432C23v78Ev
  virtual void  v79(); // _ZN7S3432C23v79Ev
  virtual void  v80(); // _ZN7S3432C23v80Ev
  virtual void  v81(); // _ZN7S3432C23v81Ev
  virtual void  v82(); // _ZN7S3432C23v82Ev
  virtual void  v83(); // _ZN7S3432C23v83Ev
  virtual void  v84(); // _ZN7S3432C23v84Ev
  S3432C2(); // tgen
};
//SIG(-1 S3432C2) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S3432C2 ::~S3432C2(){ note_dtor("S3432C2", this);}
void  S3432C2 ::v72(){vfunc_called(this, "_ZN7S3432C23v72Ev");}
void  S3432C2 ::v73(){vfunc_called(this, "_ZN7S3432C23v73Ev");}
void  S3432C2 ::v74(){vfunc_called(this, "_ZN7S3432C23v74Ev");}
void  S3432C2 ::v75(){vfunc_called(this, "_ZN7S3432C23v75Ev");}
void  S3432C2 ::v76(){vfunc_called(this, "_ZN7S3432C23v76Ev");}
void  S3432C2 ::v77(){vfunc_called(this, "_ZN7S3432C23v77Ev");}
void  S3432C2 ::v78(){vfunc_called(this, "_ZN7S3432C23v78Ev");}
void  S3432C2 ::v79(){vfunc_called(this, "_ZN7S3432C23v79Ev");}
void  S3432C2 ::v80(){vfunc_called(this, "_ZN7S3432C23v80Ev");}
void  S3432C2 ::v81(){vfunc_called(this, "_ZN7S3432C23v81Ev");}
void  S3432C2 ::v82(){vfunc_called(this, "_ZN7S3432C23v82Ev");}
void  S3432C2 ::v83(){vfunc_called(this, "_ZN7S3432C23v83Ev");}
void  S3432C2 ::v84(){vfunc_called(this, "_ZN7S3432C23v84Ev");}
S3432C2 ::S3432C2(){ note_ctor("S3432C2", this);} // tgen

static void Test_S3432C2()
{
  extern Class_Descriptor cd_S3432C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S3432C2, buf);
    S3432C2 *dp, &lv = *(dp=new (buf) S3432C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S3432C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3432C2)");
    check_base_class_offset(lv, (S3432C3*), 0, "S3432C2");
    check_field_offset(lv, s3432c2f0, ABISELECT(96,60), "S3432C2.s3432c2f0");
    check_field_offset(lv, s3432c2f1, ABISELECT(104,64), "S3432C2.s3432c2f1");
    check_field_offset(lv, s3432c2f2, ABISELECT(112,72), "S3432C2.s3432c2f2");
    set_bf_and_test(lv, s3432c2f3, ABISELECT(132,92), 0, 1, 1, "S3432C2");
    set_bf_and_test(lv, s3432c2f4, ABISELECT(132,92), 1, 1, 1, "S3432C2");
    set_bf_and_test(lv, s3432c2f5, ABISELECT(132,92), 2, 1, 1, "S3432C2");
    set_bf_and_test(lv, s3432c2f6, ABISELECT(132,92), 3, 1, 1, "S3432C2");
    set_bf_and_test(lv, s3432c2f7, ABISELECT(132,92), 4, 1, 1, "S3432C2");
    check_field_offset(lv, s3432c2f8, ABISELECT(136,96), "S3432C2.s3432c2f8");
    check_field_offset(lv, s3432c2f9, ABISELECT(152,108), "S3432C2.s3432c2f9");
    set_bf_and_test(lv, s3432c2f10, ABISELECT(168,120), 0, 1, 1, "S3432C2");
    check_field_offset(lv, s3432c2f11, ABISELECT(172,124), "S3432C2.s3432c2f11");
    check_field_offset(lv, s3432c2f12, ABISELECT(184,132), "S3432C2.s3432c2f12");
    check_field_offset(lv, s3432c2f13, ABISELECT(192,136), "S3432C2.s3432c2f13");
    test_class_info(&lv, &cd_S3432C2);
    dp->~S3432C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3432C2(Test_S3432C2, "S3432C2", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S3432C2C1Ev();
extern void _ZN7S3432C2D1Ev();
Name_Map name_map_S3432C2[] = {
  NSPAIR(_ZN7S3432C2C1Ev),
  NSPAIR(_ZN7S3432C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3432C3;
extern VTBL_ENTRY _ZTI7S3432C3[];
extern  VTBL_ENTRY _ZTV7S3432C3[];
static Base_Class bases_S3432C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3432C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3432C2[];
extern void _ZN7S3432C2D1Ev();
extern void _ZN7S3432C2D0Ev();
extern void _ZN7S3432C32v8Ev();
extern void _ZN7S3432C32v9Ev();
extern void _ZN7S3432C33v10Ev();
extern void _ZN7S3432C33v11Ev();
extern void _ZN7S3432C33v12Ev();
extern void _ZN7S3432C33v13Ev();
extern void _ZN7S3432C33v14Ev();
extern void _ZN7S3432C33v15Ev();
extern void _ZN7S3432C33v16Ev();
extern void _ZN7S3432C33v17Ev();
extern void _ZN7S3432C33v18Ev();
extern void _ZN7S3432C33v19Ev();
extern void _ZN7S3432C33v20Ev();
extern void _ZN7S3432C33v21Ev();
extern void _ZN7S3432C33v22Ev();
extern void _ZN7S3432C33v23Ev();
extern void _ZN7S3432C33v24Ev();
extern void _ZN7S3432C33v25Ev();
extern void _ZN7S3432C33v26Ev();
extern void _ZN7S3432C33v27Ev();
extern void _ZN7S3432C33v28Ev();
extern void _ZN7S3432C33v29Ev();
extern void _ZN7S3432C33v30Ev();
extern void _ZN7S3432C33v31Ev();
extern void _ZN7S3432C33v32Ev();
extern void _ZN7S3432C33v33Ev();
extern void _ZN7S3432C33v34Ev();
extern void _ZN7S3432C33v35Ev();
extern void _ZN7S3432C33v36Ev();
extern void _ZN7S3432C33v37Ev();
extern void _ZN7S3432C33v38Ev();
extern void _ZN7S3432C33v39Ev();
extern void _ZN7S3432C33v40Ev();
extern void _ZN7S3432C33v41Ev();
extern void _ZN7S3432C33v42Ev();
extern void _ZN7S3432C33v43Ev();
extern void _ZN7S3432C33v44Ev();
extern void _ZN7S3432C33v45Ev();
extern void _ZN7S3432C33v46Ev();
extern void _ZN7S3432C33v47Ev();
extern void _ZN7S3432C33v48Ev();
extern void _ZN7S3432C33v49Ev();
extern void _ZN7S3432C33v50Ev();
extern void _ZN7S3432C33v51Ev();
extern void _ZN7S3432C33v52Ev();
extern void _ZN7S3432C33v53Ev();
extern void _ZN7S3432C33v54Ev();
extern void _ZN7S3432C33v55Ev();
extern void _ZN7S3432C33v56Ev();
extern void _ZN7S3432C33v57Ev();
extern void _ZN7S3432C33v58Ev();
extern void _ZN7S3432C33v59Ev();
extern void _ZN7S3432C33v60Ev();
extern void _ZN7S3432C33v61Ev();
extern void _ZN7S3432C33v62Ev();
extern void _ZN7S3432C33v63Ev();
extern void _ZN7S3432C33v64Ev();
extern void _ZN7S3432C33v65Ev();
extern void _ZN7S3432C33v66Ev();
extern void _ZN7S3432C33v67Ev();
extern void _ZN7S3432C33v68Ev();
extern void _ZN7S3432C33v69Ev();
extern void _ZN7S3432C33v70Ev();
extern void _ZN7S3432C33v71Ev();
extern void _ZN7S3432C23v72Ev();
extern void _ZN7S3432C23v73Ev();
extern void _ZN7S3432C23v74Ev();
extern void _ZN7S3432C23v75Ev();
extern void _ZN7S3432C23v76Ev();
extern void _ZN7S3432C23v77Ev();
extern void _ZN7S3432C23v78Ev();
extern void _ZN7S3432C23v79Ev();
extern void _ZN7S3432C23v80Ev();
extern void _ZN7S3432C23v81Ev();
extern void _ZN7S3432C23v82Ev();
extern void _ZN7S3432C23v83Ev();
extern void _ZN7S3432C23v84Ev();
static  VTBL_ENTRY vtc_S3432C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3432C2[0]),
  (VTBL_ENTRY)&_ZN7S3432C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3432C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3432C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3432C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v84Ev,
};
extern VTBL_ENTRY _ZTI7S3432C2[];
extern  VTBL_ENTRY _ZTV7S3432C2[];
Class_Descriptor cd_S3432C2 = {  "S3432C2", // class name
  bases_S3432C2, 1,
  &(vtc_S3432C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S3432C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3432C2),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3432C12_nt  {
  char s3432c12f0[4];
};
//SIG(-1 S3432C12_nt) C1{ Fc[4]}



//skip512 S3432C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3432C10  {
  int s3432c10f0[2];
  ::S664C12_nt s3432c10f1;
  ::S664C12_nt s3432c10f2;
  ::S664C12_nt s3432c10f3;
  ::S3432C12_nt s3432c10f4;
  ::S632C13 s3432c10f5;
  ::S664C12_nt s3432c10f6;
  ::S664C12_nt s3432c10f7;
  ::S664C12_nt s3432c10f8;
  ::S3432C12_nt s3432c10f9;
  ::S664C12_nt s3432c10f10;
};
//SIG(-1 S3432C10) C1{ Fi[2] FC2{ m Fi[3]} FC2 FC2 FC3{ Fc[4]} FC4{ m Fi[3]} FC2 FC2 FC2 FC3 FC2}



static void Test_S3432C10()
{
  {
    init_simple_test("S3432C10");
    S3432C10 lv;
    check2(sizeof(lv), 112, "sizeof(S3432C10)");
    check2(__alignof__(lv), 4, "__alignof__(S3432C10)");
    check_field_offset(lv, s3432c10f0, 0, "S3432C10.s3432c10f0");
    check_field_offset(lv, s3432c10f1, 8, "S3432C10.s3432c10f1");
    check_field_offset(lv, s3432c10f2, 20, "S3432C10.s3432c10f2");
    check_field_offset(lv, s3432c10f3, 32, "S3432C10.s3432c10f3");
    check_field_offset(lv, s3432c10f4, 44, "S3432C10.s3432c10f4");
    check_field_offset(lv, s3432c10f5, 48, "S3432C10.s3432c10f5");
    check_field_offset(lv, s3432c10f6, 60, "S3432C10.s3432c10f6");
    check_field_offset(lv, s3432c10f7, 72, "S3432C10.s3432c10f7");
    check_field_offset(lv, s3432c10f8, 84, "S3432C10.s3432c10f8");
    check_field_offset(lv, s3432c10f9, 96, "S3432C10.s3432c10f9");
    check_field_offset(lv, s3432c10f10, 100, "S3432C10.s3432c10f10");
  }
}
static Arrange_To_Call_Me vS3432C10(Test_S3432C10, "S3432C10", 112);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3432C14_nt  {
  int s3432c14f0[2];
  void  mf3432c14(); // _ZN11S3432C14_nt9mf3432c14Ev
};
//SIG(-1 S3432C14_nt) C1{ m Fi[2]}


void  S3432C14_nt ::mf3432c14(){}

//skip512 S3432C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3432C1  : S3432C2 {
  unsigned int s3432c1f0:1;
  ::S3432C10 s3432c1f1;
  ::S3432C14_nt s3432c1f2;
  unsigned int s3432c1f3:1;
  unsigned int s3432c1f4:1;
  unsigned int s3432c1f5:1;
  virtual  ~S3432C1(); // _ZN7S3432C1D1Ev
  virtual void  v1(); // _ZN7S3432C12v1Ev
  virtual void  v2(); // _ZN7S3432C12v2Ev
  virtual void  v3(); // _ZN7S3432C12v3Ev
  virtual void  v4(); // _ZN7S3432C12v4Ev
  virtual void  v5(); // _ZN7S3432C12v5Ev
  virtual void  v6(); // _ZN7S3432C12v6Ev
  virtual void  v7(); // _ZN7S3432C12v7Ev
  S3432C1(); // tgen
};
//SIG(1 S3432C1) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 FC10{ Fi[2] FC11{ m Fi[3]} FC11 FC11 FC12{ Fc[4]} FC13{ m Fi[3]} FC11 FC11 FC11 FC12 FC11} FC14{ m Fi[2]} Fi:1 Fi:1 Fi:1}


 S3432C1 ::~S3432C1(){ note_dtor("S3432C1", this);}
void  S3432C1 ::v1(){vfunc_called(this, "_ZN7S3432C12v1Ev");}
void  S3432C1 ::v2(){vfunc_called(this, "_ZN7S3432C12v2Ev");}
void  S3432C1 ::v3(){vfunc_called(this, "_ZN7S3432C12v3Ev");}
void  S3432C1 ::v4(){vfunc_called(this, "_ZN7S3432C12v4Ev");}
void  S3432C1 ::v5(){vfunc_called(this, "_ZN7S3432C12v5Ev");}
void  S3432C1 ::v6(){vfunc_called(this, "_ZN7S3432C12v6Ev");}
void  S3432C1 ::v7(){vfunc_called(this, "_ZN7S3432C12v7Ev");}
S3432C1 ::S3432C1(){ note_ctor("S3432C1", this);} // tgen

static void Test_S3432C1()
{
  extern Class_Descriptor cd_S3432C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(43,70)];
    init_test(&cd_S3432C1, buf);
    S3432C1 *dp, &lv = *(dp=new (buf) S3432C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(336,276), "sizeof(S3432C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3432C1)");
    check_base_class_offset(lv, (S3432C3*)(S3432C2*), 0, "S3432C1");
    check_base_class_offset(lv, (S3432C2*), 0, "S3432C1");
    set_bf_and_test(lv, s3432c1f0, ABISELECT(204,148), 0, 1, 1, "S3432C1");
    check_field_offset(lv, s3432c1f1, ABISELECT(208,152), "S3432C1.s3432c1f1");
    check_field_offset(lv, s3432c1f2, ABISELECT(320,264), "S3432C1.s3432c1f2");
    set_bf_and_test(lv, s3432c1f3, ABISELECT(328,272), 0, 1, 1, "S3432C1");
    set_bf_and_test(lv, s3432c1f4, ABISELECT(328,272), 1, 1, 1, "S3432C1");
    set_bf_and_test(lv, s3432c1f5, ABISELECT(328,272), 2, 1, 1, "S3432C1");
    test_class_info(&lv, &cd_S3432C1);
    dp->~S3432C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3432C1(Test_S3432C1, "S3432C1", ABISELECT(336,276));

#else // __cplusplus

extern void _ZN7S3432C1C1Ev();
extern void _ZN7S3432C1D1Ev();
Name_Map name_map_S3432C1[] = {
  NSPAIR(_ZN7S3432C1C1Ev),
  NSPAIR(_ZN7S3432C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3432C3;
extern VTBL_ENTRY _ZTI7S3432C3[];
extern  VTBL_ENTRY _ZTV7S3432C3[];
extern Class_Descriptor cd_S3432C2;
extern VTBL_ENTRY _ZTI7S3432C2[];
extern  VTBL_ENTRY _ZTV7S3432C2[];
static Base_Class bases_S3432C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3432C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3432C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3432C1[];
extern void _ZN7S3432C1D1Ev();
extern void _ZN7S3432C1D0Ev();
extern void _ZN7S3432C32v8Ev();
extern void _ZN7S3432C32v9Ev();
extern void _ZN7S3432C33v10Ev();
extern void _ZN7S3432C33v11Ev();
extern void _ZN7S3432C33v12Ev();
extern void _ZN7S3432C33v13Ev();
extern void _ZN7S3432C33v14Ev();
extern void _ZN7S3432C33v15Ev();
extern void _ZN7S3432C33v16Ev();
extern void _ZN7S3432C33v17Ev();
extern void _ZN7S3432C33v18Ev();
extern void _ZN7S3432C33v19Ev();
extern void _ZN7S3432C33v20Ev();
extern void _ZN7S3432C33v21Ev();
extern void _ZN7S3432C33v22Ev();
extern void _ZN7S3432C33v23Ev();
extern void _ZN7S3432C33v24Ev();
extern void _ZN7S3432C33v25Ev();
extern void _ZN7S3432C33v26Ev();
extern void _ZN7S3432C33v27Ev();
extern void _ZN7S3432C33v28Ev();
extern void _ZN7S3432C33v29Ev();
extern void _ZN7S3432C33v30Ev();
extern void _ZN7S3432C33v31Ev();
extern void _ZN7S3432C33v32Ev();
extern void _ZN7S3432C33v33Ev();
extern void _ZN7S3432C33v34Ev();
extern void _ZN7S3432C33v35Ev();
extern void _ZN7S3432C33v36Ev();
extern void _ZN7S3432C33v37Ev();
extern void _ZN7S3432C33v38Ev();
extern void _ZN7S3432C33v39Ev();
extern void _ZN7S3432C33v40Ev();
extern void _ZN7S3432C33v41Ev();
extern void _ZN7S3432C33v42Ev();
extern void _ZN7S3432C33v43Ev();
extern void _ZN7S3432C33v44Ev();
extern void _ZN7S3432C33v45Ev();
extern void _ZN7S3432C33v46Ev();
extern void _ZN7S3432C33v47Ev();
extern void _ZN7S3432C33v48Ev();
extern void _ZN7S3432C33v49Ev();
extern void _ZN7S3432C33v50Ev();
extern void _ZN7S3432C33v51Ev();
extern void _ZN7S3432C33v52Ev();
extern void _ZN7S3432C33v53Ev();
extern void _ZN7S3432C33v54Ev();
extern void _ZN7S3432C33v55Ev();
extern void _ZN7S3432C33v56Ev();
extern void _ZN7S3432C33v57Ev();
extern void _ZN7S3432C33v58Ev();
extern void _ZN7S3432C33v59Ev();
extern void _ZN7S3432C33v60Ev();
extern void _ZN7S3432C33v61Ev();
extern void _ZN7S3432C33v62Ev();
extern void _ZN7S3432C33v63Ev();
extern void _ZN7S3432C33v64Ev();
extern void _ZN7S3432C33v65Ev();
extern void _ZN7S3432C33v66Ev();
extern void _ZN7S3432C33v67Ev();
extern void _ZN7S3432C33v68Ev();
extern void _ZN7S3432C33v69Ev();
extern void _ZN7S3432C33v70Ev();
extern void _ZN7S3432C33v71Ev();
extern void _ZN7S3432C23v72Ev();
extern void _ZN7S3432C23v73Ev();
extern void _ZN7S3432C23v74Ev();
extern void _ZN7S3432C23v75Ev();
extern void _ZN7S3432C23v76Ev();
extern void _ZN7S3432C23v77Ev();
extern void _ZN7S3432C23v78Ev();
extern void _ZN7S3432C23v79Ev();
extern void _ZN7S3432C23v80Ev();
extern void _ZN7S3432C23v81Ev();
extern void _ZN7S3432C23v82Ev();
extern void _ZN7S3432C23v83Ev();
extern void _ZN7S3432C23v84Ev();
extern void _ZN7S3432C12v1Ev();
extern void _ZN7S3432C12v2Ev();
extern void _ZN7S3432C12v3Ev();
extern void _ZN7S3432C12v4Ev();
extern void _ZN7S3432C12v5Ev();
extern void _ZN7S3432C12v6Ev();
extern void _ZN7S3432C12v7Ev();
static  VTBL_ENTRY vtc_S3432C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3432C1[0]),
  (VTBL_ENTRY)&_ZN7S3432C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3432C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3432C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3432C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v70Ev,
  (VTBL_ENTRY)&_ZN7S3432C33v71Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v83Ev,
  (VTBL_ENTRY)&_ZN7S3432C23v84Ev,
  (VTBL_ENTRY)&_ZN7S3432C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3432C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3432C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3432C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3432C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3432C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3432C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S3432C1[];
extern  VTBL_ENTRY _ZTV7S3432C1[];
Class_Descriptor cd_S3432C1 = {  "S3432C1", // class name
  bases_S3432C1, 2,
  &(vtc_S3432C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(336,276), // object size
  NSPAIRA(_ZTI7S3432C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3432C1),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1434C4  {
  int s1434c4f0;
  __tsi64 s1434c4f1;
  void *s1434c4f2[4];
  int s1434c4f3[2];
  void *s1434c4f4;
  ::S3432C14_nt s1434c4f5;
  void *s1434c4f6[2];
  virtual  ~S1434C4(); // _ZN7S1434C4D1Ev
  virtual void  v4(); // _ZN7S1434C42v4Ev
  virtual void  v5(); // _ZN7S1434C42v5Ev
  virtual void  v6(); // _ZN7S1434C42v6Ev
  virtual void  v7(); // _ZN7S1434C42v7Ev
  virtual void  v8(); // _ZN7S1434C42v8Ev
  virtual void  v9(); // _ZN7S1434C42v9Ev
  virtual void  v10(); // _ZN7S1434C43v10Ev
  virtual void  v11(); // _ZN7S1434C43v11Ev
  virtual void  v12(); // _ZN7S1434C43v12Ev
  virtual void  v13(); // _ZN7S1434C43v13Ev
  virtual void  v14(); // _ZN7S1434C43v14Ev
  virtual void  v15(); // _ZN7S1434C43v15Ev
  virtual void  v16(); // _ZN7S1434C43v16Ev
  virtual void  v17(); // _ZN7S1434C43v17Ev
  virtual void  v18(); // _ZN7S1434C43v18Ev
  virtual void  v19(); // _ZN7S1434C43v19Ev
  virtual void  v20(); // _ZN7S1434C43v20Ev
  virtual void  v21(); // _ZN7S1434C43v21Ev
  virtual void  v22(); // _ZN7S1434C43v22Ev
  virtual void  v23(); // _ZN7S1434C43v23Ev
  virtual void  v24(); // _ZN7S1434C43v24Ev
  virtual void  v25(); // _ZN7S1434C43v25Ev
  virtual void  v26(); // _ZN7S1434C43v26Ev
  virtual void  v27(); // _ZN7S1434C43v27Ev
  virtual void  v28(); // _ZN7S1434C43v28Ev
  virtual void  v29(); // _ZN7S1434C43v29Ev
  virtual void  v30(); // _ZN7S1434C43v30Ev
  virtual void  v31(); // _ZN7S1434C43v31Ev
  virtual void  v32(); // _ZN7S1434C43v32Ev
  virtual void  v33(); // _ZN7S1434C43v33Ev
  virtual void  v34(); // _ZN7S1434C43v34Ev
  virtual void  v35(); // _ZN7S1434C43v35Ev
  virtual void  v36(); // _ZN7S1434C43v36Ev
  virtual void  v37(); // _ZN7S1434C43v37Ev
  virtual void  v38(); // _ZN7S1434C43v38Ev
  virtual void  v39(); // _ZN7S1434C43v39Ev
  virtual void  v40(); // _ZN7S1434C43v40Ev
  virtual void  v41(); // _ZN7S1434C43v41Ev
  virtual void  v42(); // _ZN7S1434C43v42Ev
  virtual void  v43(); // _ZN7S1434C43v43Ev
  virtual void  v44(); // _ZN7S1434C43v44Ev
  virtual void  v45(); // _ZN7S1434C43v45Ev
  virtual void  v46(); // _ZN7S1434C43v46Ev
  virtual void  v47(); // _ZN7S1434C43v47Ev
  virtual void  v48(); // _ZN7S1434C43v48Ev
  virtual void  v49(); // _ZN7S1434C43v49Ev
  virtual void  v50(); // _ZN7S1434C43v50Ev
  virtual void  v51(); // _ZN7S1434C43v51Ev
  virtual void  v52(); // _ZN7S1434C43v52Ev
  virtual void  v53(); // _ZN7S1434C43v53Ev
  virtual void  v54(); // _ZN7S1434C43v54Ev
  virtual void  v55(); // _ZN7S1434C43v55Ev
  virtual void  v56(); // _ZN7S1434C43v56Ev
  virtual void  v57(); // _ZN7S1434C43v57Ev
  virtual void  v58(); // _ZN7S1434C43v58Ev
  virtual void  v59(); // _ZN7S1434C43v59Ev
  virtual void  v60(); // _ZN7S1434C43v60Ev
  virtual void  v61(); // _ZN7S1434C43v61Ev
  virtual void  v62(); // _ZN7S1434C43v62Ev
  virtual void  v63(); // _ZN7S1434C43v63Ev
  virtual void  v64(); // _ZN7S1434C43v64Ev
  virtual void  v65(); // _ZN7S1434C43v65Ev
  virtual void  v66(); // _ZN7S1434C43v66Ev
  virtual void  v67(); // _ZN7S1434C43v67Ev
  S1434C4(); // tgen
};
//SIG(-1 S1434C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1434C4 ::~S1434C4(){ note_dtor("S1434C4", this);}
void  S1434C4 ::v4(){vfunc_called(this, "_ZN7S1434C42v4Ev");}
void  S1434C4 ::v5(){vfunc_called(this, "_ZN7S1434C42v5Ev");}
void  S1434C4 ::v6(){vfunc_called(this, "_ZN7S1434C42v6Ev");}
void  S1434C4 ::v7(){vfunc_called(this, "_ZN7S1434C42v7Ev");}
void  S1434C4 ::v8(){vfunc_called(this, "_ZN7S1434C42v8Ev");}
void  S1434C4 ::v9(){vfunc_called(this, "_ZN7S1434C42v9Ev");}
void  S1434C4 ::v10(){vfunc_called(this, "_ZN7S1434C43v10Ev");}
void  S1434C4 ::v11(){vfunc_called(this, "_ZN7S1434C43v11Ev");}
void  S1434C4 ::v12(){vfunc_called(this, "_ZN7S1434C43v12Ev");}
void  S1434C4 ::v13(){vfunc_called(this, "_ZN7S1434C43v13Ev");}
void  S1434C4 ::v14(){vfunc_called(this, "_ZN7S1434C43v14Ev");}
void  S1434C4 ::v15(){vfunc_called(this, "_ZN7S1434C43v15Ev");}
void  S1434C4 ::v16(){vfunc_called(this, "_ZN7S1434C43v16Ev");}
void  S1434C4 ::v17(){vfunc_called(this, "_ZN7S1434C43v17Ev");}
void  S1434C4 ::v18(){vfunc_called(this, "_ZN7S1434C43v18Ev");}
void  S1434C4 ::v19(){vfunc_called(this, "_ZN7S1434C43v19Ev");}
void  S1434C4 ::v20(){vfunc_called(this, "_ZN7S1434C43v20Ev");}
void  S1434C4 ::v21(){vfunc_called(this, "_ZN7S1434C43v21Ev");}
void  S1434C4 ::v22(){vfunc_called(this, "_ZN7S1434C43v22Ev");}
void  S1434C4 ::v23(){vfunc_called(this, "_ZN7S1434C43v23Ev");}
void  S1434C4 ::v24(){vfunc_called(this, "_ZN7S1434C43v24Ev");}
void  S1434C4 ::v25(){vfunc_called(this, "_ZN7S1434C43v25Ev");}
void  S1434C4 ::v26(){vfunc_called(this, "_ZN7S1434C43v26Ev");}
void  S1434C4 ::v27(){vfunc_called(this, "_ZN7S1434C43v27Ev");}
void  S1434C4 ::v28(){vfunc_called(this, "_ZN7S1434C43v28Ev");}
void  S1434C4 ::v29(){vfunc_called(this, "_ZN7S1434C43v29Ev");}
void  S1434C4 ::v30(){vfunc_called(this, "_ZN7S1434C43v30Ev");}
void  S1434C4 ::v31(){vfunc_called(this, "_ZN7S1434C43v31Ev");}
void  S1434C4 ::v32(){vfunc_called(this, "_ZN7S1434C43v32Ev");}
void  S1434C4 ::v33(){vfunc_called(this, "_ZN7S1434C43v33Ev");}
void  S1434C4 ::v34(){vfunc_called(this, "_ZN7S1434C43v34Ev");}
void  S1434C4 ::v35(){vfunc_called(this, "_ZN7S1434C43v35Ev");}
void  S1434C4 ::v36(){vfunc_called(this, "_ZN7S1434C43v36Ev");}
void  S1434C4 ::v37(){vfunc_called(this, "_ZN7S1434C43v37Ev");}
void  S1434C4 ::v38(){vfunc_called(this, "_ZN7S1434C43v38Ev");}
void  S1434C4 ::v39(){vfunc_called(this, "_ZN7S1434C43v39Ev");}
void  S1434C4 ::v40(){vfunc_called(this, "_ZN7S1434C43v40Ev");}
void  S1434C4 ::v41(){vfunc_called(this, "_ZN7S1434C43v41Ev");}
void  S1434C4 ::v42(){vfunc_called(this, "_ZN7S1434C43v42Ev");}
void  S1434C4 ::v43(){vfunc_called(this, "_ZN7S1434C43v43Ev");}
void  S1434C4 ::v44(){vfunc_called(this, "_ZN7S1434C43v44Ev");}
void  S1434C4 ::v45(){vfunc_called(this, "_ZN7S1434C43v45Ev");}
void  S1434C4 ::v46(){vfunc_called(this, "_ZN7S1434C43v46Ev");}
void  S1434C4 ::v47(){vfunc_called(this, "_ZN7S1434C43v47Ev");}
void  S1434C4 ::v48(){vfunc_called(this, "_ZN7S1434C43v48Ev");}
void  S1434C4 ::v49(){vfunc_called(this, "_ZN7S1434C43v49Ev");}
void  S1434C4 ::v50(){vfunc_called(this, "_ZN7S1434C43v50Ev");}
void  S1434C4 ::v51(){vfunc_called(this, "_ZN7S1434C43v51Ev");}
void  S1434C4 ::v52(){vfunc_called(this, "_ZN7S1434C43v52Ev");}
void  S1434C4 ::v53(){vfunc_called(this, "_ZN7S1434C43v53Ev");}
void  S1434C4 ::v54(){vfunc_called(this, "_ZN7S1434C43v54Ev");}
void  S1434C4 ::v55(){vfunc_called(this, "_ZN7S1434C43v55Ev");}
void  S1434C4 ::v56(){vfunc_called(this, "_ZN7S1434C43v56Ev");}
void  S1434C4 ::v57(){vfunc_called(this, "_ZN7S1434C43v57Ev");}
void  S1434C4 ::v58(){vfunc_called(this, "_ZN7S1434C43v58Ev");}
void  S1434C4 ::v59(){vfunc_called(this, "_ZN7S1434C43v59Ev");}
void  S1434C4 ::v60(){vfunc_called(this, "_ZN7S1434C43v60Ev");}
void  S1434C4 ::v61(){vfunc_called(this, "_ZN7S1434C43v61Ev");}
void  S1434C4 ::v62(){vfunc_called(this, "_ZN7S1434C43v62Ev");}
void  S1434C4 ::v63(){vfunc_called(this, "_ZN7S1434C43v63Ev");}
void  S1434C4 ::v64(){vfunc_called(this, "_ZN7S1434C43v64Ev");}
void  S1434C4 ::v65(){vfunc_called(this, "_ZN7S1434C43v65Ev");}
void  S1434C4 ::v66(){vfunc_called(this, "_ZN7S1434C43v66Ev");}
void  S1434C4 ::v67(){vfunc_called(this, "_ZN7S1434C43v67Ev");}
S1434C4 ::S1434C4(){ note_ctor("S1434C4", this);} // tgen

static void Test_S1434C4()
{
  extern Class_Descriptor cd_S1434C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1434C4, buf);
    S1434C4 *dp, &lv = *(dp=new (buf) S1434C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1434C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1434C4)");
    check_field_offset(lv, s1434c4f0, ABISELECT(8,4), "S1434C4.s1434c4f0");
    check_field_offset(lv, s1434c4f1, ABISELECT(16,8), "S1434C4.s1434c4f1");
    check_field_offset(lv, s1434c4f2, ABISELECT(24,16), "S1434C4.s1434c4f2");
    check_field_offset(lv, s1434c4f3, ABISELECT(56,32), "S1434C4.s1434c4f3");
    check_field_offset(lv, s1434c4f4, ABISELECT(64,40), "S1434C4.s1434c4f4");
    check_field_offset(lv, s1434c4f5, ABISELECT(72,44), "S1434C4.s1434c4f5");
    check_field_offset(lv, s1434c4f6, ABISELECT(80,52), "S1434C4.s1434c4f6");
    test_class_info(&lv, &cd_S1434C4);
    dp->~S1434C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1434C4(Test_S1434C4, "S1434C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1434C4C1Ev();
extern void _ZN7S1434C4D1Ev();
Name_Map name_map_S1434C4[] = {
  NSPAIR(_ZN7S1434C4C1Ev),
  NSPAIR(_ZN7S1434C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1434C4[];
extern void _ZN7S1434C4D1Ev();
extern void _ZN7S1434C4D0Ev();
extern void _ZN7S1434C42v4Ev();
extern void _ZN7S1434C42v5Ev();
extern void _ZN7S1434C42v6Ev();
extern void _ZN7S1434C42v7Ev();
extern void _ZN7S1434C42v8Ev();
extern void _ZN7S1434C42v9Ev();
extern void _ZN7S1434C43v10Ev();
extern void _ZN7S1434C43v11Ev();
extern void _ZN7S1434C43v12Ev();
extern void _ZN7S1434C43v13Ev();
extern void _ZN7S1434C43v14Ev();
extern void _ZN7S1434C43v15Ev();
extern void _ZN7S1434C43v16Ev();
extern void _ZN7S1434C43v17Ev();
extern void _ZN7S1434C43v18Ev();
extern void _ZN7S1434C43v19Ev();
extern void _ZN7S1434C43v20Ev();
extern void _ZN7S1434C43v21Ev();
extern void _ZN7S1434C43v22Ev();
extern void _ZN7S1434C43v23Ev();
extern void _ZN7S1434C43v24Ev();
extern void _ZN7S1434C43v25Ev();
extern void _ZN7S1434C43v26Ev();
extern void _ZN7S1434C43v27Ev();
extern void _ZN7S1434C43v28Ev();
extern void _ZN7S1434C43v29Ev();
extern void _ZN7S1434C43v30Ev();
extern void _ZN7S1434C43v31Ev();
extern void _ZN7S1434C43v32Ev();
extern void _ZN7S1434C43v33Ev();
extern void _ZN7S1434C43v34Ev();
extern void _ZN7S1434C43v35Ev();
extern void _ZN7S1434C43v36Ev();
extern void _ZN7S1434C43v37Ev();
extern void _ZN7S1434C43v38Ev();
extern void _ZN7S1434C43v39Ev();
extern void _ZN7S1434C43v40Ev();
extern void _ZN7S1434C43v41Ev();
extern void _ZN7S1434C43v42Ev();
extern void _ZN7S1434C43v43Ev();
extern void _ZN7S1434C43v44Ev();
extern void _ZN7S1434C43v45Ev();
extern void _ZN7S1434C43v46Ev();
extern void _ZN7S1434C43v47Ev();
extern void _ZN7S1434C43v48Ev();
extern void _ZN7S1434C43v49Ev();
extern void _ZN7S1434C43v50Ev();
extern void _ZN7S1434C43v51Ev();
extern void _ZN7S1434C43v52Ev();
extern void _ZN7S1434C43v53Ev();
extern void _ZN7S1434C43v54Ev();
extern void _ZN7S1434C43v55Ev();
extern void _ZN7S1434C43v56Ev();
extern void _ZN7S1434C43v57Ev();
extern void _ZN7S1434C43v58Ev();
extern void _ZN7S1434C43v59Ev();
extern void _ZN7S1434C43v60Ev();
extern void _ZN7S1434C43v61Ev();
extern void _ZN7S1434C43v62Ev();
extern void _ZN7S1434C43v63Ev();
extern void _ZN7S1434C43v64Ev();
extern void _ZN7S1434C43v65Ev();
extern void _ZN7S1434C43v66Ev();
extern void _ZN7S1434C43v67Ev();
static  VTBL_ENTRY vtc_S1434C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1434C4[0]),
  (VTBL_ENTRY)&_ZN7S1434C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1434C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v67Ev,
};
extern VTBL_ENTRY _ZTI7S1434C4[];
extern  VTBL_ENTRY _ZTV7S1434C4[];
Class_Descriptor cd_S1434C4 = {  "S1434C4", // class name
  0,0,//no base classes
  &(vtc_S1434C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1434C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1434C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1434C3  : S1434C4 {
  void *s1434c3f0;
  ::S3432C14_nt s1434c3f1;
  int s1434c3f2[5];
  unsigned int s1434c3f3:1;
  unsigned int s1434c3f4:1;
  unsigned int s1434c3f5:1;
  unsigned int s1434c3f6:1;
  unsigned int s1434c3f7:1;
  ::S273C21 s1434c3f8;
  ::S273C17 s1434c3f9;
  unsigned int s1434c3f10:1;
  int s1434c3f11[2];
  void *s1434c3f12;
  int s1434c3f13[3];
  virtual  ~S1434C3(); // _ZN7S1434C3D1Ev
  virtual void  v68(); // _ZN7S1434C33v68Ev
  virtual void  v69(); // _ZN7S1434C33v69Ev
  virtual void  v70(); // _ZN7S1434C33v70Ev
  virtual void  v71(); // _ZN7S1434C33v71Ev
  virtual void  v72(); // _ZN7S1434C33v72Ev
  virtual void  v73(); // _ZN7S1434C33v73Ev
  virtual void  v74(); // _ZN7S1434C33v74Ev
  virtual void  v75(); // _ZN7S1434C33v75Ev
  virtual void  v76(); // _ZN7S1434C33v76Ev
  virtual void  v77(); // _ZN7S1434C33v77Ev
  virtual void  v78(); // _ZN7S1434C33v78Ev
  virtual void  v79(); // _ZN7S1434C33v79Ev
  virtual void  v80(); // _ZN7S1434C33v80Ev
  S1434C3(); // tgen
};
//SIG(-1 S1434C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1434C3 ::~S1434C3(){ note_dtor("S1434C3", this);}
void  S1434C3 ::v68(){vfunc_called(this, "_ZN7S1434C33v68Ev");}
void  S1434C3 ::v69(){vfunc_called(this, "_ZN7S1434C33v69Ev");}
void  S1434C3 ::v70(){vfunc_called(this, "_ZN7S1434C33v70Ev");}
void  S1434C3 ::v71(){vfunc_called(this, "_ZN7S1434C33v71Ev");}
void  S1434C3 ::v72(){vfunc_called(this, "_ZN7S1434C33v72Ev");}
void  S1434C3 ::v73(){vfunc_called(this, "_ZN7S1434C33v73Ev");}
void  S1434C3 ::v74(){vfunc_called(this, "_ZN7S1434C33v74Ev");}
void  S1434C3 ::v75(){vfunc_called(this, "_ZN7S1434C33v75Ev");}
void  S1434C3 ::v76(){vfunc_called(this, "_ZN7S1434C33v76Ev");}
void  S1434C3 ::v77(){vfunc_called(this, "_ZN7S1434C33v77Ev");}
void  S1434C3 ::v78(){vfunc_called(this, "_ZN7S1434C33v78Ev");}
void  S1434C3 ::v79(){vfunc_called(this, "_ZN7S1434C33v79Ev");}
void  S1434C3 ::v80(){vfunc_called(this, "_ZN7S1434C33v80Ev");}
S1434C3 ::S1434C3(){ note_ctor("S1434C3", this);} // tgen

static void Test_S1434C3()
{
  extern Class_Descriptor cd_S1434C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1434C3, buf);
    S1434C3 *dp, &lv = *(dp=new (buf) S1434C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1434C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1434C3)");
    check_base_class_offset(lv, (S1434C4*), 0, "S1434C3");
    check_field_offset(lv, s1434c3f0, ABISELECT(96,60), "S1434C3.s1434c3f0");
    check_field_offset(lv, s1434c3f1, ABISELECT(104,64), "S1434C3.s1434c3f1");
    check_field_offset(lv, s1434c3f2, ABISELECT(112,72), "S1434C3.s1434c3f2");
    set_bf_and_test(lv, s1434c3f3, ABISELECT(132,92), 0, 1, 1, "S1434C3");
    set_bf_and_test(lv, s1434c3f4, ABISELECT(132,92), 1, 1, 1, "S1434C3");
    set_bf_and_test(lv, s1434c3f5, ABISELECT(132,92), 2, 1, 1, "S1434C3");
    set_bf_and_test(lv, s1434c3f6, ABISELECT(132,92), 3, 1, 1, "S1434C3");
    set_bf_and_test(lv, s1434c3f7, ABISELECT(132,92), 4, 1, 1, "S1434C3");
    check_field_offset(lv, s1434c3f8, ABISELECT(136,96), "S1434C3.s1434c3f8");
    check_field_offset(lv, s1434c3f9, ABISELECT(152,108), "S1434C3.s1434c3f9");
    set_bf_and_test(lv, s1434c3f10, ABISELECT(168,120), 0, 1, 1, "S1434C3");
    check_field_offset(lv, s1434c3f11, ABISELECT(172,124), "S1434C3.s1434c3f11");
    check_field_offset(lv, s1434c3f12, ABISELECT(184,132), "S1434C3.s1434c3f12");
    check_field_offset(lv, s1434c3f13, ABISELECT(192,136), "S1434C3.s1434c3f13");
    test_class_info(&lv, &cd_S1434C3);
    dp->~S1434C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1434C3(Test_S1434C3, "S1434C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1434C3C1Ev();
extern void _ZN7S1434C3D1Ev();
Name_Map name_map_S1434C3[] = {
  NSPAIR(_ZN7S1434C3C1Ev),
  NSPAIR(_ZN7S1434C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1434C4;
extern VTBL_ENTRY _ZTI7S1434C4[];
extern  VTBL_ENTRY _ZTV7S1434C4[];
static Base_Class bases_S1434C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1434C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1434C3[];
extern void _ZN7S1434C3D1Ev();
extern void _ZN7S1434C3D0Ev();
extern void _ZN7S1434C42v4Ev();
extern void _ZN7S1434C42v5Ev();
extern void _ZN7S1434C42v6Ev();
extern void _ZN7S1434C42v7Ev();
extern void _ZN7S1434C42v8Ev();
extern void _ZN7S1434C42v9Ev();
extern void _ZN7S1434C43v10Ev();
extern void _ZN7S1434C43v11Ev();
extern void _ZN7S1434C43v12Ev();
extern void _ZN7S1434C43v13Ev();
extern void _ZN7S1434C43v14Ev();
extern void _ZN7S1434C43v15Ev();
extern void _ZN7S1434C43v16Ev();
extern void _ZN7S1434C43v17Ev();
extern void _ZN7S1434C43v18Ev();
extern void _ZN7S1434C43v19Ev();
extern void _ZN7S1434C43v20Ev();
extern void _ZN7S1434C43v21Ev();
extern void _ZN7S1434C43v22Ev();
extern void _ZN7S1434C43v23Ev();
extern void _ZN7S1434C43v24Ev();
extern void _ZN7S1434C43v25Ev();
extern void _ZN7S1434C43v26Ev();
extern void _ZN7S1434C43v27Ev();
extern void _ZN7S1434C43v28Ev();
extern void _ZN7S1434C43v29Ev();
extern void _ZN7S1434C43v30Ev();
extern void _ZN7S1434C43v31Ev();
extern void _ZN7S1434C43v32Ev();
extern void _ZN7S1434C43v33Ev();
extern void _ZN7S1434C43v34Ev();
extern void _ZN7S1434C43v35Ev();
extern void _ZN7S1434C43v36Ev();
extern void _ZN7S1434C43v37Ev();
extern void _ZN7S1434C43v38Ev();
extern void _ZN7S1434C43v39Ev();
extern void _ZN7S1434C43v40Ev();
extern void _ZN7S1434C43v41Ev();
extern void _ZN7S1434C43v42Ev();
extern void _ZN7S1434C43v43Ev();
extern void _ZN7S1434C43v44Ev();
extern void _ZN7S1434C43v45Ev();
extern void _ZN7S1434C43v46Ev();
extern void _ZN7S1434C43v47Ev();
extern void _ZN7S1434C43v48Ev();
extern void _ZN7S1434C43v49Ev();
extern void _ZN7S1434C43v50Ev();
extern void _ZN7S1434C43v51Ev();
extern void _ZN7S1434C43v52Ev();
extern void _ZN7S1434C43v53Ev();
extern void _ZN7S1434C43v54Ev();
extern void _ZN7S1434C43v55Ev();
extern void _ZN7S1434C43v56Ev();
extern void _ZN7S1434C43v57Ev();
extern void _ZN7S1434C43v58Ev();
extern void _ZN7S1434C43v59Ev();
extern void _ZN7S1434C43v60Ev();
extern void _ZN7S1434C43v61Ev();
extern void _ZN7S1434C43v62Ev();
extern void _ZN7S1434C43v63Ev();
extern void _ZN7S1434C43v64Ev();
extern void _ZN7S1434C43v65Ev();
extern void _ZN7S1434C43v66Ev();
extern void _ZN7S1434C43v67Ev();
extern void _ZN7S1434C33v68Ev();
extern void _ZN7S1434C33v69Ev();
extern void _ZN7S1434C33v70Ev();
extern void _ZN7S1434C33v71Ev();
extern void _ZN7S1434C33v72Ev();
extern void _ZN7S1434C33v73Ev();
extern void _ZN7S1434C33v74Ev();
extern void _ZN7S1434C33v75Ev();
extern void _ZN7S1434C33v76Ev();
extern void _ZN7S1434C33v77Ev();
extern void _ZN7S1434C33v78Ev();
extern void _ZN7S1434C33v79Ev();
extern void _ZN7S1434C33v80Ev();
static  VTBL_ENTRY vtc_S1434C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1434C3[0]),
  (VTBL_ENTRY)&_ZN7S1434C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1434C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S1434C3[];
extern  VTBL_ENTRY _ZTV7S1434C3[];
Class_Descriptor cd_S1434C3 = {  "S1434C3", // class name
  bases_S1434C3, 1,
  &(vtc_S1434C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1434C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1434C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1434C2  : S1434C3 {
  ::S664C12_nt s1434c2f0;
  char s1434c2f1[4];
  ::S3432C14_nt s1434c2f2;
  ::S664C12_nt s1434c2f3;
  ::S3432C14_nt s1434c2f4;
  unsigned int s1434c2f5:1;
  unsigned int s1434c2f6:1;
  unsigned int s1434c2f7:1;
  unsigned int s1434c2f8:1;
  virtual  ~S1434C2(); // _ZN7S1434C2D1Ev
  virtual void  v81(); // _ZN7S1434C23v81Ev
  virtual void  v82(); // _ZN7S1434C23v82Ev
  virtual void  v83(); // _ZN7S1434C23v83Ev
  virtual void  v84(); // _ZN7S1434C23v84Ev
  virtual void  v85(); // _ZN7S1434C23v85Ev
  virtual void  v86(); // _ZN7S1434C23v86Ev
  virtual void  v87(); // _ZN7S1434C23v87Ev
  virtual void  v88(); // _ZN7S1434C23v88Ev
  S1434C2(); // tgen
};
//SIG(-1 S1434C2) C1{ BC2{ BC3{ vd v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 v8 FC10{ m Fi[3]} Fc[4] FC4 FC10 FC4 Fi:1 Fi:1 Fi:1 Fi:1}


 S1434C2 ::~S1434C2(){ note_dtor("S1434C2", this);}
void  S1434C2 ::v81(){vfunc_called(this, "_ZN7S1434C23v81Ev");}
void  S1434C2 ::v82(){vfunc_called(this, "_ZN7S1434C23v82Ev");}
void  S1434C2 ::v83(){vfunc_called(this, "_ZN7S1434C23v83Ev");}
void  S1434C2 ::v84(){vfunc_called(this, "_ZN7S1434C23v84Ev");}
void  S1434C2 ::v85(){vfunc_called(this, "_ZN7S1434C23v85Ev");}
void  S1434C2 ::v86(){vfunc_called(this, "_ZN7S1434C23v86Ev");}
void  S1434C2 ::v87(){vfunc_called(this, "_ZN7S1434C23v87Ev");}
void  S1434C2 ::v88(){vfunc_called(this, "_ZN7S1434C23v88Ev");}
S1434C2 ::S1434C2(){ note_ctor("S1434C2", this);} // tgen

static void Test_S1434C2()
{
  extern Class_Descriptor cd_S1434C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1434C2, buf);
    S1434C2 *dp, &lv = *(dp=new (buf) S1434C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1434C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1434C2)");
    check_base_class_offset(lv, (S1434C4*)(S1434C3*), 0, "S1434C2");
    check_base_class_offset(lv, (S1434C3*), 0, "S1434C2");
    check_field_offset(lv, s1434c2f0, ABISELECT(204,148), "S1434C2.s1434c2f0");
    check_field_offset(lv, s1434c2f1, ABISELECT(216,160), "S1434C2.s1434c2f1");
    check_field_offset(lv, s1434c2f2, ABISELECT(220,164), "S1434C2.s1434c2f2");
    check_field_offset(lv, s1434c2f3, ABISELECT(228,172), "S1434C2.s1434c2f3");
    check_field_offset(lv, s1434c2f4, ABISELECT(240,184), "S1434C2.s1434c2f4");
    set_bf_and_test(lv, s1434c2f5, ABISELECT(248,192), 0, 1, 1, "S1434C2");
    set_bf_and_test(lv, s1434c2f6, ABISELECT(248,192), 1, 1, 1, "S1434C2");
    set_bf_and_test(lv, s1434c2f7, ABISELECT(248,192), 2, 1, 1, "S1434C2");
    set_bf_and_test(lv, s1434c2f8, ABISELECT(248,192), 3, 1, 1, "S1434C2");
    test_class_info(&lv, &cd_S1434C2);
    dp->~S1434C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1434C2(Test_S1434C2, "S1434C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1434C2C1Ev();
extern void _ZN7S1434C2D1Ev();
Name_Map name_map_S1434C2[] = {
  NSPAIR(_ZN7S1434C2C1Ev),
  NSPAIR(_ZN7S1434C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1434C4;
extern VTBL_ENTRY _ZTI7S1434C4[];
extern  VTBL_ENTRY _ZTV7S1434C4[];
extern Class_Descriptor cd_S1434C3;
extern VTBL_ENTRY _ZTI7S1434C3[];
extern  VTBL_ENTRY _ZTV7S1434C3[];
static Base_Class bases_S1434C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1434C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1434C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1434C2[];
extern void _ZN7S1434C2D1Ev();
extern void _ZN7S1434C2D0Ev();
extern void _ZN7S1434C42v4Ev();
extern void _ZN7S1434C42v5Ev();
extern void _ZN7S1434C42v6Ev();
extern void _ZN7S1434C42v7Ev();
extern void _ZN7S1434C42v8Ev();
extern void _ZN7S1434C42v9Ev();
extern void _ZN7S1434C43v10Ev();
extern void _ZN7S1434C43v11Ev();
extern void _ZN7S1434C43v12Ev();
extern void _ZN7S1434C43v13Ev();
extern void _ZN7S1434C43v14Ev();
extern void _ZN7S1434C43v15Ev();
extern void _ZN7S1434C43v16Ev();
extern void _ZN7S1434C43v17Ev();
extern void _ZN7S1434C43v18Ev();
extern void _ZN7S1434C43v19Ev();
extern void _ZN7S1434C43v20Ev();
extern void _ZN7S1434C43v21Ev();
extern void _ZN7S1434C43v22Ev();
extern void _ZN7S1434C43v23Ev();
extern void _ZN7S1434C43v24Ev();
extern void _ZN7S1434C43v25Ev();
extern void _ZN7S1434C43v26Ev();
extern void _ZN7S1434C43v27Ev();
extern void _ZN7S1434C43v28Ev();
extern void _ZN7S1434C43v29Ev();
extern void _ZN7S1434C43v30Ev();
extern void _ZN7S1434C43v31Ev();
extern void _ZN7S1434C43v32Ev();
extern void _ZN7S1434C43v33Ev();
extern void _ZN7S1434C43v34Ev();
extern void _ZN7S1434C43v35Ev();
extern void _ZN7S1434C43v36Ev();
extern void _ZN7S1434C43v37Ev();
extern void _ZN7S1434C43v38Ev();
extern void _ZN7S1434C43v39Ev();
extern void _ZN7S1434C43v40Ev();
extern void _ZN7S1434C43v41Ev();
extern void _ZN7S1434C43v42Ev();
extern void _ZN7S1434C43v43Ev();
extern void _ZN7S1434C43v44Ev();
extern void _ZN7S1434C43v45Ev();
extern void _ZN7S1434C43v46Ev();
extern void _ZN7S1434C43v47Ev();
extern void _ZN7S1434C43v48Ev();
extern void _ZN7S1434C43v49Ev();
extern void _ZN7S1434C43v50Ev();
extern void _ZN7S1434C43v51Ev();
extern void _ZN7S1434C43v52Ev();
extern void _ZN7S1434C43v53Ev();
extern void _ZN7S1434C43v54Ev();
extern void _ZN7S1434C43v55Ev();
extern void _ZN7S1434C43v56Ev();
extern void _ZN7S1434C43v57Ev();
extern void _ZN7S1434C43v58Ev();
extern void _ZN7S1434C43v59Ev();
extern void _ZN7S1434C43v60Ev();
extern void _ZN7S1434C43v61Ev();
extern void _ZN7S1434C43v62Ev();
extern void _ZN7S1434C43v63Ev();
extern void _ZN7S1434C43v64Ev();
extern void _ZN7S1434C43v65Ev();
extern void _ZN7S1434C43v66Ev();
extern void _ZN7S1434C43v67Ev();
extern void _ZN7S1434C33v68Ev();
extern void _ZN7S1434C33v69Ev();
extern void _ZN7S1434C33v70Ev();
extern void _ZN7S1434C33v71Ev();
extern void _ZN7S1434C33v72Ev();
extern void _ZN7S1434C33v73Ev();
extern void _ZN7S1434C33v74Ev();
extern void _ZN7S1434C33v75Ev();
extern void _ZN7S1434C33v76Ev();
extern void _ZN7S1434C33v77Ev();
extern void _ZN7S1434C33v78Ev();
extern void _ZN7S1434C33v79Ev();
extern void _ZN7S1434C33v80Ev();
extern void _ZN7S1434C23v81Ev();
extern void _ZN7S1434C23v82Ev();
extern void _ZN7S1434C23v83Ev();
extern void _ZN7S1434C23v84Ev();
extern void _ZN7S1434C23v85Ev();
extern void _ZN7S1434C23v86Ev();
extern void _ZN7S1434C23v87Ev();
extern void _ZN7S1434C23v88Ev();
static  VTBL_ENTRY vtc_S1434C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1434C2[0]),
  (VTBL_ENTRY)&_ZN7S1434C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1434C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v88Ev,
};
extern VTBL_ENTRY _ZTI7S1434C2[];
extern  VTBL_ENTRY _ZTV7S1434C2[];
Class_Descriptor cd_S1434C2 = {  "S1434C2", // class name
  bases_S1434C2, 2,
  &(vtc_S1434C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1434C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1434C2),89, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1434C1  : S1434C2 {
  int s1434c1f0;
  char s1434c1f1;
  ::S632C13 s1434c1f2;
  unsigned int s1434c1f3:1;
  unsigned int s1434c1f4:1;
  unsigned int s1434c1f5:1;
  int s1434c1f6[3];
  virtual  ~S1434C1(); // _ZN7S1434C1D1Ev
  virtual void  v1(); // _ZN7S1434C12v1Ev
  virtual void  v2(); // _ZN7S1434C12v2Ev
  virtual void  v3(); // _ZN7S1434C12v3Ev
  S1434C1(); // tgen
};
//SIG(1 S1434C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 v88 FC11{ m Fi[3]} Fc[4] FC5 FC11 FC5 Fi:1 Fi:1 Fi:1 Fi:1} vd v1 v2 v3 Fi Fc FC12{ m Fi[3]} Fi:1 Fi:1 Fi:1 Fi[3]}


 S1434C1 ::~S1434C1(){ note_dtor("S1434C1", this);}
void  S1434C1 ::v1(){vfunc_called(this, "_ZN7S1434C12v1Ev");}
void  S1434C1 ::v2(){vfunc_called(this, "_ZN7S1434C12v2Ev");}
void  S1434C1 ::v3(){vfunc_called(this, "_ZN7S1434C12v3Ev");}
S1434C1 ::S1434C1(){ note_ctor("S1434C1", this);} // tgen

static void Test_S1434C1()
{
  extern Class_Descriptor cd_S1434C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,59)];
    init_test(&cd_S1434C1, buf);
    S1434C1 *dp, &lv = *(dp=new (buf) S1434C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,232), "sizeof(S1434C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1434C1)");
    check_base_class_offset(lv, (S1434C4*)(S1434C3*)(S1434C2*), 0, "S1434C1");
    check_base_class_offset(lv, (S1434C3*)(S1434C2*), 0, "S1434C1");
    check_base_class_offset(lv, (S1434C2*), 0, "S1434C1");
    check_field_offset(lv, s1434c1f0, ABISELECT(252,196), "S1434C1.s1434c1f0");
    check_field_offset(lv, s1434c1f1, ABISELECT(256,200), "S1434C1.s1434c1f1");
    check_field_offset(lv, s1434c1f2, ABISELECT(260,204), "S1434C1.s1434c1f2");
    set_bf_and_test(lv, s1434c1f3, ABISELECT(272,216), 0, 1, 1, "S1434C1");
    set_bf_and_test(lv, s1434c1f4, ABISELECT(272,216), 1, 1, 1, "S1434C1");
    set_bf_and_test(lv, s1434c1f5, ABISELECT(272,216), 2, 1, 1, "S1434C1");
    check_field_offset(lv, s1434c1f6, ABISELECT(276,220), "S1434C1.s1434c1f6");
    test_class_info(&lv, &cd_S1434C1);
    dp->~S1434C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1434C1(Test_S1434C1, "S1434C1", ABISELECT(288,232));

#else // __cplusplus

extern void _ZN7S1434C1C1Ev();
extern void _ZN7S1434C1D1Ev();
Name_Map name_map_S1434C1[] = {
  NSPAIR(_ZN7S1434C1C1Ev),
  NSPAIR(_ZN7S1434C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1434C4;
extern VTBL_ENTRY _ZTI7S1434C4[];
extern  VTBL_ENTRY _ZTV7S1434C4[];
extern Class_Descriptor cd_S1434C3;
extern VTBL_ENTRY _ZTI7S1434C3[];
extern  VTBL_ENTRY _ZTV7S1434C3[];
extern Class_Descriptor cd_S1434C2;
extern VTBL_ENTRY _ZTI7S1434C2[];
extern  VTBL_ENTRY _ZTV7S1434C2[];
static Base_Class bases_S1434C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1434C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1434C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1434C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1434C1[];
extern void _ZN7S1434C1D1Ev();
extern void _ZN7S1434C1D0Ev();
extern void _ZN7S1434C42v4Ev();
extern void _ZN7S1434C42v5Ev();
extern void _ZN7S1434C42v6Ev();
extern void _ZN7S1434C42v7Ev();
extern void _ZN7S1434C42v8Ev();
extern void _ZN7S1434C42v9Ev();
extern void _ZN7S1434C43v10Ev();
extern void _ZN7S1434C43v11Ev();
extern void _ZN7S1434C43v12Ev();
extern void _ZN7S1434C43v13Ev();
extern void _ZN7S1434C43v14Ev();
extern void _ZN7S1434C43v15Ev();
extern void _ZN7S1434C43v16Ev();
extern void _ZN7S1434C43v17Ev();
extern void _ZN7S1434C43v18Ev();
extern void _ZN7S1434C43v19Ev();
extern void _ZN7S1434C43v20Ev();
extern void _ZN7S1434C43v21Ev();
extern void _ZN7S1434C43v22Ev();
extern void _ZN7S1434C43v23Ev();
extern void _ZN7S1434C43v24Ev();
extern void _ZN7S1434C43v25Ev();
extern void _ZN7S1434C43v26Ev();
extern void _ZN7S1434C43v27Ev();
extern void _ZN7S1434C43v28Ev();
extern void _ZN7S1434C43v29Ev();
extern void _ZN7S1434C43v30Ev();
extern void _ZN7S1434C43v31Ev();
extern void _ZN7S1434C43v32Ev();
extern void _ZN7S1434C43v33Ev();
extern void _ZN7S1434C43v34Ev();
extern void _ZN7S1434C43v35Ev();
extern void _ZN7S1434C43v36Ev();
extern void _ZN7S1434C43v37Ev();
extern void _ZN7S1434C43v38Ev();
extern void _ZN7S1434C43v39Ev();
extern void _ZN7S1434C43v40Ev();
extern void _ZN7S1434C43v41Ev();
extern void _ZN7S1434C43v42Ev();
extern void _ZN7S1434C43v43Ev();
extern void _ZN7S1434C43v44Ev();
extern void _ZN7S1434C43v45Ev();
extern void _ZN7S1434C43v46Ev();
extern void _ZN7S1434C43v47Ev();
extern void _ZN7S1434C43v48Ev();
extern void _ZN7S1434C43v49Ev();
extern void _ZN7S1434C43v50Ev();
extern void _ZN7S1434C43v51Ev();
extern void _ZN7S1434C43v52Ev();
extern void _ZN7S1434C43v53Ev();
extern void _ZN7S1434C43v54Ev();
extern void _ZN7S1434C43v55Ev();
extern void _ZN7S1434C43v56Ev();
extern void _ZN7S1434C43v57Ev();
extern void _ZN7S1434C43v58Ev();
extern void _ZN7S1434C43v59Ev();
extern void _ZN7S1434C43v60Ev();
extern void _ZN7S1434C43v61Ev();
extern void _ZN7S1434C43v62Ev();
extern void _ZN7S1434C43v63Ev();
extern void _ZN7S1434C43v64Ev();
extern void _ZN7S1434C43v65Ev();
extern void _ZN7S1434C43v66Ev();
extern void _ZN7S1434C43v67Ev();
extern void _ZN7S1434C33v68Ev();
extern void _ZN7S1434C33v69Ev();
extern void _ZN7S1434C33v70Ev();
extern void _ZN7S1434C33v71Ev();
extern void _ZN7S1434C33v72Ev();
extern void _ZN7S1434C33v73Ev();
extern void _ZN7S1434C33v74Ev();
extern void _ZN7S1434C33v75Ev();
extern void _ZN7S1434C33v76Ev();
extern void _ZN7S1434C33v77Ev();
extern void _ZN7S1434C33v78Ev();
extern void _ZN7S1434C33v79Ev();
extern void _ZN7S1434C33v80Ev();
extern void _ZN7S1434C23v81Ev();
extern void _ZN7S1434C23v82Ev();
extern void _ZN7S1434C23v83Ev();
extern void _ZN7S1434C23v84Ev();
extern void _ZN7S1434C23v85Ev();
extern void _ZN7S1434C23v86Ev();
extern void _ZN7S1434C23v87Ev();
extern void _ZN7S1434C23v88Ev();
extern void _ZN7S1434C12v1Ev();
extern void _ZN7S1434C12v2Ev();
extern void _ZN7S1434C12v3Ev();
static  VTBL_ENTRY vtc_S1434C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1434C1[0]),
  (VTBL_ENTRY)&_ZN7S1434C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1434C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1434C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1434C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1434C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1434C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1434C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1434C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1434C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1434C1[];
extern  VTBL_ENTRY _ZTV7S1434C1[];
Class_Descriptor cd_S1434C1 = {  "S1434C1", // class name
  bases_S1434C1, 3,
  &(vtc_S1434C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,232), // object size
  NSPAIRA(_ZTI7S1434C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1434C1),92, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1468C4  {
  int s1468c4f0;
  __tsi64 s1468c4f1;
  void *s1468c4f2[4];
  int s1468c4f3[2];
  void *s1468c4f4;
  ::S3432C14_nt s1468c4f5;
  void *s1468c4f6[2];
  virtual  ~S1468C4(); // _ZN7S1468C4D1Ev
  virtual void  v5(); // _ZN7S1468C42v5Ev
  virtual void  v6(); // _ZN7S1468C42v6Ev
  virtual void  v7(); // _ZN7S1468C42v7Ev
  virtual void  v8(); // _ZN7S1468C42v8Ev
  virtual void  v9(); // _ZN7S1468C42v9Ev
  virtual void  v10(); // _ZN7S1468C43v10Ev
  virtual void  v11(); // _ZN7S1468C43v11Ev
  virtual void  v12(); // _ZN7S1468C43v12Ev
  virtual void  v13(); // _ZN7S1468C43v13Ev
  virtual void  v14(); // _ZN7S1468C43v14Ev
  virtual void  v15(); // _ZN7S1468C43v15Ev
  virtual void  v16(); // _ZN7S1468C43v16Ev
  virtual void  v17(); // _ZN7S1468C43v17Ev
  virtual void  v18(); // _ZN7S1468C43v18Ev
  virtual void  v19(); // _ZN7S1468C43v19Ev
  virtual void  v20(); // _ZN7S1468C43v20Ev
  virtual void  v21(); // _ZN7S1468C43v21Ev
  virtual void  v22(); // _ZN7S1468C43v22Ev
  virtual void  v23(); // _ZN7S1468C43v23Ev
  virtual void  v24(); // _ZN7S1468C43v24Ev
  virtual void  v25(); // _ZN7S1468C43v25Ev
  virtual void  v26(); // _ZN7S1468C43v26Ev
  virtual void  v27(); // _ZN7S1468C43v27Ev
  virtual void  v28(); // _ZN7S1468C43v28Ev
  virtual void  v29(); // _ZN7S1468C43v29Ev
  virtual void  v30(); // _ZN7S1468C43v30Ev
  virtual void  v31(); // _ZN7S1468C43v31Ev
  virtual void  v32(); // _ZN7S1468C43v32Ev
  virtual void  v33(); // _ZN7S1468C43v33Ev
  virtual void  v34(); // _ZN7S1468C43v34Ev
  virtual void  v35(); // _ZN7S1468C43v35Ev
  virtual void  v36(); // _ZN7S1468C43v36Ev
  virtual void  v37(); // _ZN7S1468C43v37Ev
  virtual void  v38(); // _ZN7S1468C43v38Ev
  virtual void  v39(); // _ZN7S1468C43v39Ev
  virtual void  v40(); // _ZN7S1468C43v40Ev
  virtual void  v41(); // _ZN7S1468C43v41Ev
  virtual void  v42(); // _ZN7S1468C43v42Ev
  virtual void  v43(); // _ZN7S1468C43v43Ev
  virtual void  v44(); // _ZN7S1468C43v44Ev
  virtual void  v45(); // _ZN7S1468C43v45Ev
  virtual void  v46(); // _ZN7S1468C43v46Ev
  virtual void  v47(); // _ZN7S1468C43v47Ev
  virtual void  v48(); // _ZN7S1468C43v48Ev
  virtual void  v49(); // _ZN7S1468C43v49Ev
  virtual void  v50(); // _ZN7S1468C43v50Ev
  virtual void  v51(); // _ZN7S1468C43v51Ev
  virtual void  v52(); // _ZN7S1468C43v52Ev
  virtual void  v53(); // _ZN7S1468C43v53Ev
  virtual void  v54(); // _ZN7S1468C43v54Ev
  virtual void  v55(); // _ZN7S1468C43v55Ev
  virtual void  v56(); // _ZN7S1468C43v56Ev
  virtual void  v57(); // _ZN7S1468C43v57Ev
  virtual void  v58(); // _ZN7S1468C43v58Ev
  virtual void  v59(); // _ZN7S1468C43v59Ev
  virtual void  v60(); // _ZN7S1468C43v60Ev
  virtual void  v61(); // _ZN7S1468C43v61Ev
  virtual void  v62(); // _ZN7S1468C43v62Ev
  virtual void  v63(); // _ZN7S1468C43v63Ev
  virtual void  v64(); // _ZN7S1468C43v64Ev
  virtual void  v65(); // _ZN7S1468C43v65Ev
  virtual void  v66(); // _ZN7S1468C43v66Ev
  virtual void  v67(); // _ZN7S1468C43v67Ev
  virtual void  v68(); // _ZN7S1468C43v68Ev
  S1468C4(); // tgen
};
//SIG(-1 S1468C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1468C4 ::~S1468C4(){ note_dtor("S1468C4", this);}
void  S1468C4 ::v5(){vfunc_called(this, "_ZN7S1468C42v5Ev");}
void  S1468C4 ::v6(){vfunc_called(this, "_ZN7S1468C42v6Ev");}
void  S1468C4 ::v7(){vfunc_called(this, "_ZN7S1468C42v7Ev");}
void  S1468C4 ::v8(){vfunc_called(this, "_ZN7S1468C42v8Ev");}
void  S1468C4 ::v9(){vfunc_called(this, "_ZN7S1468C42v9Ev");}
void  S1468C4 ::v10(){vfunc_called(this, "_ZN7S1468C43v10Ev");}
void  S1468C4 ::v11(){vfunc_called(this, "_ZN7S1468C43v11Ev");}
void  S1468C4 ::v12(){vfunc_called(this, "_ZN7S1468C43v12Ev");}
void  S1468C4 ::v13(){vfunc_called(this, "_ZN7S1468C43v13Ev");}
void  S1468C4 ::v14(){vfunc_called(this, "_ZN7S1468C43v14Ev");}
void  S1468C4 ::v15(){vfunc_called(this, "_ZN7S1468C43v15Ev");}
void  S1468C4 ::v16(){vfunc_called(this, "_ZN7S1468C43v16Ev");}
void  S1468C4 ::v17(){vfunc_called(this, "_ZN7S1468C43v17Ev");}
void  S1468C4 ::v18(){vfunc_called(this, "_ZN7S1468C43v18Ev");}
void  S1468C4 ::v19(){vfunc_called(this, "_ZN7S1468C43v19Ev");}
void  S1468C4 ::v20(){vfunc_called(this, "_ZN7S1468C43v20Ev");}
void  S1468C4 ::v21(){vfunc_called(this, "_ZN7S1468C43v21Ev");}
void  S1468C4 ::v22(){vfunc_called(this, "_ZN7S1468C43v22Ev");}
void  S1468C4 ::v23(){vfunc_called(this, "_ZN7S1468C43v23Ev");}
void  S1468C4 ::v24(){vfunc_called(this, "_ZN7S1468C43v24Ev");}
void  S1468C4 ::v25(){vfunc_called(this, "_ZN7S1468C43v25Ev");}
void  S1468C4 ::v26(){vfunc_called(this, "_ZN7S1468C43v26Ev");}
void  S1468C4 ::v27(){vfunc_called(this, "_ZN7S1468C43v27Ev");}
void  S1468C4 ::v28(){vfunc_called(this, "_ZN7S1468C43v28Ev");}
void  S1468C4 ::v29(){vfunc_called(this, "_ZN7S1468C43v29Ev");}
void  S1468C4 ::v30(){vfunc_called(this, "_ZN7S1468C43v30Ev");}
void  S1468C4 ::v31(){vfunc_called(this, "_ZN7S1468C43v31Ev");}
void  S1468C4 ::v32(){vfunc_called(this, "_ZN7S1468C43v32Ev");}
void  S1468C4 ::v33(){vfunc_called(this, "_ZN7S1468C43v33Ev");}
void  S1468C4 ::v34(){vfunc_called(this, "_ZN7S1468C43v34Ev");}
void  S1468C4 ::v35(){vfunc_called(this, "_ZN7S1468C43v35Ev");}
void  S1468C4 ::v36(){vfunc_called(this, "_ZN7S1468C43v36Ev");}
void  S1468C4 ::v37(){vfunc_called(this, "_ZN7S1468C43v37Ev");}
void  S1468C4 ::v38(){vfunc_called(this, "_ZN7S1468C43v38Ev");}
void  S1468C4 ::v39(){vfunc_called(this, "_ZN7S1468C43v39Ev");}
void  S1468C4 ::v40(){vfunc_called(this, "_ZN7S1468C43v40Ev");}
void  S1468C4 ::v41(){vfunc_called(this, "_ZN7S1468C43v41Ev");}
void  S1468C4 ::v42(){vfunc_called(this, "_ZN7S1468C43v42Ev");}
void  S1468C4 ::v43(){vfunc_called(this, "_ZN7S1468C43v43Ev");}
void  S1468C4 ::v44(){vfunc_called(this, "_ZN7S1468C43v44Ev");}
void  S1468C4 ::v45(){vfunc_called(this, "_ZN7S1468C43v45Ev");}
void  S1468C4 ::v46(){vfunc_called(this, "_ZN7S1468C43v46Ev");}
void  S1468C4 ::v47(){vfunc_called(this, "_ZN7S1468C43v47Ev");}
void  S1468C4 ::v48(){vfunc_called(this, "_ZN7S1468C43v48Ev");}
void  S1468C4 ::v49(){vfunc_called(this, "_ZN7S1468C43v49Ev");}
void  S1468C4 ::v50(){vfunc_called(this, "_ZN7S1468C43v50Ev");}
void  S1468C4 ::v51(){vfunc_called(this, "_ZN7S1468C43v51Ev");}
void  S1468C4 ::v52(){vfunc_called(this, "_ZN7S1468C43v52Ev");}
void  S1468C4 ::v53(){vfunc_called(this, "_ZN7S1468C43v53Ev");}
void  S1468C4 ::v54(){vfunc_called(this, "_ZN7S1468C43v54Ev");}
void  S1468C4 ::v55(){vfunc_called(this, "_ZN7S1468C43v55Ev");}
void  S1468C4 ::v56(){vfunc_called(this, "_ZN7S1468C43v56Ev");}
void  S1468C4 ::v57(){vfunc_called(this, "_ZN7S1468C43v57Ev");}
void  S1468C4 ::v58(){vfunc_called(this, "_ZN7S1468C43v58Ev");}
void  S1468C4 ::v59(){vfunc_called(this, "_ZN7S1468C43v59Ev");}
void  S1468C4 ::v60(){vfunc_called(this, "_ZN7S1468C43v60Ev");}
void  S1468C4 ::v61(){vfunc_called(this, "_ZN7S1468C43v61Ev");}
void  S1468C4 ::v62(){vfunc_called(this, "_ZN7S1468C43v62Ev");}
void  S1468C4 ::v63(){vfunc_called(this, "_ZN7S1468C43v63Ev");}
void  S1468C4 ::v64(){vfunc_called(this, "_ZN7S1468C43v64Ev");}
void  S1468C4 ::v65(){vfunc_called(this, "_ZN7S1468C43v65Ev");}
void  S1468C4 ::v66(){vfunc_called(this, "_ZN7S1468C43v66Ev");}
void  S1468C4 ::v67(){vfunc_called(this, "_ZN7S1468C43v67Ev");}
void  S1468C4 ::v68(){vfunc_called(this, "_ZN7S1468C43v68Ev");}
S1468C4 ::S1468C4(){ note_ctor("S1468C4", this);} // tgen

static void Test_S1468C4()
{
  extern Class_Descriptor cd_S1468C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1468C4, buf);
    S1468C4 *dp, &lv = *(dp=new (buf) S1468C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1468C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1468C4)");
    check_field_offset(lv, s1468c4f0, ABISELECT(8,4), "S1468C4.s1468c4f0");
    check_field_offset(lv, s1468c4f1, ABISELECT(16,8), "S1468C4.s1468c4f1");
    check_field_offset(lv, s1468c4f2, ABISELECT(24,16), "S1468C4.s1468c4f2");
    check_field_offset(lv, s1468c4f3, ABISELECT(56,32), "S1468C4.s1468c4f3");
    check_field_offset(lv, s1468c4f4, ABISELECT(64,40), "S1468C4.s1468c4f4");
    check_field_offset(lv, s1468c4f5, ABISELECT(72,44), "S1468C4.s1468c4f5");
    check_field_offset(lv, s1468c4f6, ABISELECT(80,52), "S1468C4.s1468c4f6");
    test_class_info(&lv, &cd_S1468C4);
    dp->~S1468C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1468C4(Test_S1468C4, "S1468C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1468C4C1Ev();
extern void _ZN7S1468C4D1Ev();
Name_Map name_map_S1468C4[] = {
  NSPAIR(_ZN7S1468C4C1Ev),
  NSPAIR(_ZN7S1468C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1468C4[];
extern void _ZN7S1468C4D1Ev();
extern void _ZN7S1468C4D0Ev();
extern void _ZN7S1468C42v5Ev();
extern void _ZN7S1468C42v6Ev();
extern void _ZN7S1468C42v7Ev();
extern void _ZN7S1468C42v8Ev();
extern void _ZN7S1468C42v9Ev();
extern void _ZN7S1468C43v10Ev();
extern void _ZN7S1468C43v11Ev();
extern void _ZN7S1468C43v12Ev();
extern void _ZN7S1468C43v13Ev();
extern void _ZN7S1468C43v14Ev();
extern void _ZN7S1468C43v15Ev();
extern void _ZN7S1468C43v16Ev();
extern void _ZN7S1468C43v17Ev();
extern void _ZN7S1468C43v18Ev();
extern void _ZN7S1468C43v19Ev();
extern void _ZN7S1468C43v20Ev();
extern void _ZN7S1468C43v21Ev();
extern void _ZN7S1468C43v22Ev();
extern void _ZN7S1468C43v23Ev();
extern void _ZN7S1468C43v24Ev();
extern void _ZN7S1468C43v25Ev();
extern void _ZN7S1468C43v26Ev();
extern void _ZN7S1468C43v27Ev();
extern void _ZN7S1468C43v28Ev();
extern void _ZN7S1468C43v29Ev();
extern void _ZN7S1468C43v30Ev();
extern void _ZN7S1468C43v31Ev();
extern void _ZN7S1468C43v32Ev();
extern void _ZN7S1468C43v33Ev();
extern void _ZN7S1468C43v34Ev();
extern void _ZN7S1468C43v35Ev();
extern void _ZN7S1468C43v36Ev();
extern void _ZN7S1468C43v37Ev();
extern void _ZN7S1468C43v38Ev();
extern void _ZN7S1468C43v39Ev();
extern void _ZN7S1468C43v40Ev();
extern void _ZN7S1468C43v41Ev();
extern void _ZN7S1468C43v42Ev();
extern void _ZN7S1468C43v43Ev();
extern void _ZN7S1468C43v44Ev();
extern void _ZN7S1468C43v45Ev();
extern void _ZN7S1468C43v46Ev();
extern void _ZN7S1468C43v47Ev();
extern void _ZN7S1468C43v48Ev();
extern void _ZN7S1468C43v49Ev();
extern void _ZN7S1468C43v50Ev();
extern void _ZN7S1468C43v51Ev();
extern void _ZN7S1468C43v52Ev();
extern void _ZN7S1468C43v53Ev();
extern void _ZN7S1468C43v54Ev();
extern void _ZN7S1468C43v55Ev();
extern void _ZN7S1468C43v56Ev();
extern void _ZN7S1468C43v57Ev();
extern void _ZN7S1468C43v58Ev();
extern void _ZN7S1468C43v59Ev();
extern void _ZN7S1468C43v60Ev();
extern void _ZN7S1468C43v61Ev();
extern void _ZN7S1468C43v62Ev();
extern void _ZN7S1468C43v63Ev();
extern void _ZN7S1468C43v64Ev();
extern void _ZN7S1468C43v65Ev();
extern void _ZN7S1468C43v66Ev();
extern void _ZN7S1468C43v67Ev();
extern void _ZN7S1468C43v68Ev();
static  VTBL_ENTRY vtc_S1468C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1468C4[0]),
  (VTBL_ENTRY)&_ZN7S1468C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1468C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v68Ev,
};
extern VTBL_ENTRY _ZTI7S1468C4[];
extern  VTBL_ENTRY _ZTV7S1468C4[];
Class_Descriptor cd_S1468C4 = {  "S1468C4", // class name
  0,0,//no base classes
  &(vtc_S1468C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1468C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1468C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1468C3  : S1468C4 {
  void *s1468c3f0;
  ::S3432C14_nt s1468c3f1;
  int s1468c3f2[5];
  unsigned int s1468c3f3:1;
  unsigned int s1468c3f4:1;
  unsigned int s1468c3f5:1;
  unsigned int s1468c3f6:1;
  unsigned int s1468c3f7:1;
  ::S273C21 s1468c3f8;
  ::S273C17 s1468c3f9;
  unsigned int s1468c3f10:1;
  int s1468c3f11[2];
  void *s1468c3f12;
  int s1468c3f13[3];
  virtual  ~S1468C3(); // _ZN7S1468C3D1Ev
  virtual void  v69(); // _ZN7S1468C33v69Ev
  virtual void  v70(); // _ZN7S1468C33v70Ev
  virtual void  v71(); // _ZN7S1468C33v71Ev
  virtual void  v72(); // _ZN7S1468C33v72Ev
  virtual void  v73(); // _ZN7S1468C33v73Ev
  virtual void  v74(); // _ZN7S1468C33v74Ev
  virtual void  v75(); // _ZN7S1468C33v75Ev
  virtual void  v76(); // _ZN7S1468C33v76Ev
  virtual void  v77(); // _ZN7S1468C33v77Ev
  virtual void  v78(); // _ZN7S1468C33v78Ev
  virtual void  v79(); // _ZN7S1468C33v79Ev
  virtual void  v80(); // _ZN7S1468C33v80Ev
  virtual void  v81(); // _ZN7S1468C33v81Ev
  S1468C3(); // tgen
};
//SIG(-1 S1468C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1468C3 ::~S1468C3(){ note_dtor("S1468C3", this);}
void  S1468C3 ::v69(){vfunc_called(this, "_ZN7S1468C33v69Ev");}
void  S1468C3 ::v70(){vfunc_called(this, "_ZN7S1468C33v70Ev");}
void  S1468C3 ::v71(){vfunc_called(this, "_ZN7S1468C33v71Ev");}
void  S1468C3 ::v72(){vfunc_called(this, "_ZN7S1468C33v72Ev");}
void  S1468C3 ::v73(){vfunc_called(this, "_ZN7S1468C33v73Ev");}
void  S1468C3 ::v74(){vfunc_called(this, "_ZN7S1468C33v74Ev");}
void  S1468C3 ::v75(){vfunc_called(this, "_ZN7S1468C33v75Ev");}
void  S1468C3 ::v76(){vfunc_called(this, "_ZN7S1468C33v76Ev");}
void  S1468C3 ::v77(){vfunc_called(this, "_ZN7S1468C33v77Ev");}
void  S1468C3 ::v78(){vfunc_called(this, "_ZN7S1468C33v78Ev");}
void  S1468C3 ::v79(){vfunc_called(this, "_ZN7S1468C33v79Ev");}
void  S1468C3 ::v80(){vfunc_called(this, "_ZN7S1468C33v80Ev");}
void  S1468C3 ::v81(){vfunc_called(this, "_ZN7S1468C33v81Ev");}
S1468C3 ::S1468C3(){ note_ctor("S1468C3", this);} // tgen

static void Test_S1468C3()
{
  extern Class_Descriptor cd_S1468C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1468C3, buf);
    S1468C3 *dp, &lv = *(dp=new (buf) S1468C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1468C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1468C3)");
    check_base_class_offset(lv, (S1468C4*), 0, "S1468C3");
    check_field_offset(lv, s1468c3f0, ABISELECT(96,60), "S1468C3.s1468c3f0");
    check_field_offset(lv, s1468c3f1, ABISELECT(104,64), "S1468C3.s1468c3f1");
    check_field_offset(lv, s1468c3f2, ABISELECT(112,72), "S1468C3.s1468c3f2");
    set_bf_and_test(lv, s1468c3f3, ABISELECT(132,92), 0, 1, 1, "S1468C3");
    set_bf_and_test(lv, s1468c3f4, ABISELECT(132,92), 1, 1, 1, "S1468C3");
    set_bf_and_test(lv, s1468c3f5, ABISELECT(132,92), 2, 1, 1, "S1468C3");
    set_bf_and_test(lv, s1468c3f6, ABISELECT(132,92), 3, 1, 1, "S1468C3");
    set_bf_and_test(lv, s1468c3f7, ABISELECT(132,92), 4, 1, 1, "S1468C3");
    check_field_offset(lv, s1468c3f8, ABISELECT(136,96), "S1468C3.s1468c3f8");
    check_field_offset(lv, s1468c3f9, ABISELECT(152,108), "S1468C3.s1468c3f9");
    set_bf_and_test(lv, s1468c3f10, ABISELECT(168,120), 0, 1, 1, "S1468C3");
    check_field_offset(lv, s1468c3f11, ABISELECT(172,124), "S1468C3.s1468c3f11");
    check_field_offset(lv, s1468c3f12, ABISELECT(184,132), "S1468C3.s1468c3f12");
    check_field_offset(lv, s1468c3f13, ABISELECT(192,136), "S1468C3.s1468c3f13");
    test_class_info(&lv, &cd_S1468C3);
    dp->~S1468C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1468C3(Test_S1468C3, "S1468C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1468C3C1Ev();
extern void _ZN7S1468C3D1Ev();
Name_Map name_map_S1468C3[] = {
  NSPAIR(_ZN7S1468C3C1Ev),
  NSPAIR(_ZN7S1468C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1468C4;
extern VTBL_ENTRY _ZTI7S1468C4[];
extern  VTBL_ENTRY _ZTV7S1468C4[];
static Base_Class bases_S1468C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1468C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1468C3[];
extern void _ZN7S1468C3D1Ev();
extern void _ZN7S1468C3D0Ev();
extern void _ZN7S1468C42v5Ev();
extern void _ZN7S1468C42v6Ev();
extern void _ZN7S1468C42v7Ev();
extern void _ZN7S1468C42v8Ev();
extern void _ZN7S1468C42v9Ev();
extern void _ZN7S1468C43v10Ev();
extern void _ZN7S1468C43v11Ev();
extern void _ZN7S1468C43v12Ev();
extern void _ZN7S1468C43v13Ev();
extern void _ZN7S1468C43v14Ev();
extern void _ZN7S1468C43v15Ev();
extern void _ZN7S1468C43v16Ev();
extern void _ZN7S1468C43v17Ev();
extern void _ZN7S1468C43v18Ev();
extern void _ZN7S1468C43v19Ev();
extern void _ZN7S1468C43v20Ev();
extern void _ZN7S1468C43v21Ev();
extern void _ZN7S1468C43v22Ev();
extern void _ZN7S1468C43v23Ev();
extern void _ZN7S1468C43v24Ev();
extern void _ZN7S1468C43v25Ev();
extern void _ZN7S1468C43v26Ev();
extern void _ZN7S1468C43v27Ev();
extern void _ZN7S1468C43v28Ev();
extern void _ZN7S1468C43v29Ev();
extern void _ZN7S1468C43v30Ev();
extern void _ZN7S1468C43v31Ev();
extern void _ZN7S1468C43v32Ev();
extern void _ZN7S1468C43v33Ev();
extern void _ZN7S1468C43v34Ev();
extern void _ZN7S1468C43v35Ev();
extern void _ZN7S1468C43v36Ev();
extern void _ZN7S1468C43v37Ev();
extern void _ZN7S1468C43v38Ev();
extern void _ZN7S1468C43v39Ev();
extern void _ZN7S1468C43v40Ev();
extern void _ZN7S1468C43v41Ev();
extern void _ZN7S1468C43v42Ev();
extern void _ZN7S1468C43v43Ev();
extern void _ZN7S1468C43v44Ev();
extern void _ZN7S1468C43v45Ev();
extern void _ZN7S1468C43v46Ev();
extern void _ZN7S1468C43v47Ev();
extern void _ZN7S1468C43v48Ev();
extern void _ZN7S1468C43v49Ev();
extern void _ZN7S1468C43v50Ev();
extern void _ZN7S1468C43v51Ev();
extern void _ZN7S1468C43v52Ev();
extern void _ZN7S1468C43v53Ev();
extern void _ZN7S1468C43v54Ev();
extern void _ZN7S1468C43v55Ev();
extern void _ZN7S1468C43v56Ev();
extern void _ZN7S1468C43v57Ev();
extern void _ZN7S1468C43v58Ev();
extern void _ZN7S1468C43v59Ev();
extern void _ZN7S1468C43v60Ev();
extern void _ZN7S1468C43v61Ev();
extern void _ZN7S1468C43v62Ev();
extern void _ZN7S1468C43v63Ev();
extern void _ZN7S1468C43v64Ev();
extern void _ZN7S1468C43v65Ev();
extern void _ZN7S1468C43v66Ev();
extern void _ZN7S1468C43v67Ev();
extern void _ZN7S1468C43v68Ev();
extern void _ZN7S1468C33v69Ev();
extern void _ZN7S1468C33v70Ev();
extern void _ZN7S1468C33v71Ev();
extern void _ZN7S1468C33v72Ev();
extern void _ZN7S1468C33v73Ev();
extern void _ZN7S1468C33v74Ev();
extern void _ZN7S1468C33v75Ev();
extern void _ZN7S1468C33v76Ev();
extern void _ZN7S1468C33v77Ev();
extern void _ZN7S1468C33v78Ev();
extern void _ZN7S1468C33v79Ev();
extern void _ZN7S1468C33v80Ev();
extern void _ZN7S1468C33v81Ev();
static  VTBL_ENTRY vtc_S1468C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1468C3[0]),
  (VTBL_ENTRY)&_ZN7S1468C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1468C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v81Ev,
};
extern VTBL_ENTRY _ZTI7S1468C3[];
extern  VTBL_ENTRY _ZTV7S1468C3[];
Class_Descriptor cd_S1468C3 = {  "S1468C3", // class name
  bases_S1468C3, 1,
  &(vtc_S1468C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1468C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1468C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1468C2  : S1468C3 {
  unsigned int s1468c2f0:1;
  unsigned int s1468c2f1:1;
  unsigned int s1468c2f2:1;
  unsigned int s1468c2f3:1;
  ::S664C12_nt s1468c2f4;
  char s1468c2f5[2];
  ::S3432C14_nt s1468c2f6;
  ::S632C13 s1468c2f7;
  ::S3432C14_nt s1468c2f8;
  virtual  ~S1468C2(); // _ZN7S1468C2D1Ev
  virtual void  v82(); // _ZN7S1468C23v82Ev
  virtual void  v83(); // _ZN7S1468C23v83Ev
  virtual void  v84(); // _ZN7S1468C23v84Ev
  virtual void  v85(); // _ZN7S1468C23v85Ev
  virtual void  v86(); // _ZN7S1468C23v86Ev
  virtual void  v87(); // _ZN7S1468C23v87Ev
  virtual void  v88(); // _ZN7S1468C23v88Ev
  S1468C2(); // tgen
};
//SIG(-1 S1468C2) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S1468C2 ::~S1468C2(){ note_dtor("S1468C2", this);}
void  S1468C2 ::v82(){vfunc_called(this, "_ZN7S1468C23v82Ev");}
void  S1468C2 ::v83(){vfunc_called(this, "_ZN7S1468C23v83Ev");}
void  S1468C2 ::v84(){vfunc_called(this, "_ZN7S1468C23v84Ev");}
void  S1468C2 ::v85(){vfunc_called(this, "_ZN7S1468C23v85Ev");}
void  S1468C2 ::v86(){vfunc_called(this, "_ZN7S1468C23v86Ev");}
void  S1468C2 ::v87(){vfunc_called(this, "_ZN7S1468C23v87Ev");}
void  S1468C2 ::v88(){vfunc_called(this, "_ZN7S1468C23v88Ev");}
S1468C2 ::S1468C2(){ note_ctor("S1468C2", this);} // tgen

static void Test_S1468C2()
{
  extern Class_Descriptor cd_S1468C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1468C2, buf);
    S1468C2 *dp, &lv = *(dp=new (buf) S1468C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1468C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1468C2)");
    check_base_class_offset(lv, (S1468C4*)(S1468C3*), 0, "S1468C2");
    check_base_class_offset(lv, (S1468C3*), 0, "S1468C2");
    set_bf_and_test(lv, s1468c2f0, ABISELECT(204,148), 0, 1, 1, "S1468C2");
    set_bf_and_test(lv, s1468c2f1, ABISELECT(204,148), 1, 1, 1, "S1468C2");
    set_bf_and_test(lv, s1468c2f2, ABISELECT(204,148), 2, 1, 1, "S1468C2");
    set_bf_and_test(lv, s1468c2f3, ABISELECT(204,148), 3, 1, 1, "S1468C2");
    check_field_offset(lv, s1468c2f4, ABISELECT(208,152), "S1468C2.s1468c2f4");
    check_field_offset(lv, s1468c2f5, ABISELECT(220,164), "S1468C2.s1468c2f5");
    check_field_offset(lv, s1468c2f6, ABISELECT(224,168), "S1468C2.s1468c2f6");
    check_field_offset(lv, s1468c2f7, ABISELECT(232,176), "S1468C2.s1468c2f7");
    check_field_offset(lv, s1468c2f8, ABISELECT(244,188), "S1468C2.s1468c2f8");
    test_class_info(&lv, &cd_S1468C2);
    dp->~S1468C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1468C2(Test_S1468C2, "S1468C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1468C2C1Ev();
extern void _ZN7S1468C2D1Ev();
Name_Map name_map_S1468C2[] = {
  NSPAIR(_ZN7S1468C2C1Ev),
  NSPAIR(_ZN7S1468C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1468C4;
extern VTBL_ENTRY _ZTI7S1468C4[];
extern  VTBL_ENTRY _ZTV7S1468C4[];
extern Class_Descriptor cd_S1468C3;
extern VTBL_ENTRY _ZTI7S1468C3[];
extern  VTBL_ENTRY _ZTV7S1468C3[];
static Base_Class bases_S1468C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1468C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1468C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1468C2[];
extern void _ZN7S1468C2D1Ev();
extern void _ZN7S1468C2D0Ev();
extern void _ZN7S1468C42v5Ev();
extern void _ZN7S1468C42v6Ev();
extern void _ZN7S1468C42v7Ev();
extern void _ZN7S1468C42v8Ev();
extern void _ZN7S1468C42v9Ev();
extern void _ZN7S1468C43v10Ev();
extern void _ZN7S1468C43v11Ev();
extern void _ZN7S1468C43v12Ev();
extern void _ZN7S1468C43v13Ev();
extern void _ZN7S1468C43v14Ev();
extern void _ZN7S1468C43v15Ev();
extern void _ZN7S1468C43v16Ev();
extern void _ZN7S1468C43v17Ev();
extern void _ZN7S1468C43v18Ev();
extern void _ZN7S1468C43v19Ev();
extern void _ZN7S1468C43v20Ev();
extern void _ZN7S1468C43v21Ev();
extern void _ZN7S1468C43v22Ev();
extern void _ZN7S1468C43v23Ev();
extern void _ZN7S1468C43v24Ev();
extern void _ZN7S1468C43v25Ev();
extern void _ZN7S1468C43v26Ev();
extern void _ZN7S1468C43v27Ev();
extern void _ZN7S1468C43v28Ev();
extern void _ZN7S1468C43v29Ev();
extern void _ZN7S1468C43v30Ev();
extern void _ZN7S1468C43v31Ev();
extern void _ZN7S1468C43v32Ev();
extern void _ZN7S1468C43v33Ev();
extern void _ZN7S1468C43v34Ev();
extern void _ZN7S1468C43v35Ev();
extern void _ZN7S1468C43v36Ev();
extern void _ZN7S1468C43v37Ev();
extern void _ZN7S1468C43v38Ev();
extern void _ZN7S1468C43v39Ev();
extern void _ZN7S1468C43v40Ev();
extern void _ZN7S1468C43v41Ev();
extern void _ZN7S1468C43v42Ev();
extern void _ZN7S1468C43v43Ev();
extern void _ZN7S1468C43v44Ev();
extern void _ZN7S1468C43v45Ev();
extern void _ZN7S1468C43v46Ev();
extern void _ZN7S1468C43v47Ev();
extern void _ZN7S1468C43v48Ev();
extern void _ZN7S1468C43v49Ev();
extern void _ZN7S1468C43v50Ev();
extern void _ZN7S1468C43v51Ev();
extern void _ZN7S1468C43v52Ev();
extern void _ZN7S1468C43v53Ev();
extern void _ZN7S1468C43v54Ev();
extern void _ZN7S1468C43v55Ev();
extern void _ZN7S1468C43v56Ev();
extern void _ZN7S1468C43v57Ev();
extern void _ZN7S1468C43v58Ev();
extern void _ZN7S1468C43v59Ev();
extern void _ZN7S1468C43v60Ev();
extern void _ZN7S1468C43v61Ev();
extern void _ZN7S1468C43v62Ev();
extern void _ZN7S1468C43v63Ev();
extern void _ZN7S1468C43v64Ev();
extern void _ZN7S1468C43v65Ev();
extern void _ZN7S1468C43v66Ev();
extern void _ZN7S1468C43v67Ev();
extern void _ZN7S1468C43v68Ev();
extern void _ZN7S1468C33v69Ev();
extern void _ZN7S1468C33v70Ev();
extern void _ZN7S1468C33v71Ev();
extern void _ZN7S1468C33v72Ev();
extern void _ZN7S1468C33v73Ev();
extern void _ZN7S1468C33v74Ev();
extern void _ZN7S1468C33v75Ev();
extern void _ZN7S1468C33v76Ev();
extern void _ZN7S1468C33v77Ev();
extern void _ZN7S1468C33v78Ev();
extern void _ZN7S1468C33v79Ev();
extern void _ZN7S1468C33v80Ev();
extern void _ZN7S1468C33v81Ev();
extern void _ZN7S1468C23v82Ev();
extern void _ZN7S1468C23v83Ev();
extern void _ZN7S1468C23v84Ev();
extern void _ZN7S1468C23v85Ev();
extern void _ZN7S1468C23v86Ev();
extern void _ZN7S1468C23v87Ev();
extern void _ZN7S1468C23v88Ev();
static  VTBL_ENTRY vtc_S1468C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1468C2[0]),
  (VTBL_ENTRY)&_ZN7S1468C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1468C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1468C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1468C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1468C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1468C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1468C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1468C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1468C23v88Ev,
};
extern VTBL_ENTRY _ZTI7S1468C2[];
extern  VTBL_ENTRY _ZTV7S1468C2[];
Class_Descriptor cd_S1468C2 = {  "S1468C2", // class name
  bases_S1468C2, 2,
  &(vtc_S1468C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1468C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1468C2),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1468C1  : S1468C2 {
  int s1468c1f0[2];
  ::S273C13 s1468c1f1;
  int s1468c1f2[4];
  virtual  ~S1468C1(); // _ZN7S1468C1D1Ev
  virtual void  v1(); // _ZN7S1468C12v1Ev
  virtual void  v2(); // _ZN7S1468C12v2Ev
  virtual void  v3(); // _ZN7S1468C12v3Ev
  virtual void  v4(); // _ZN7S1468C12v4Ev
  S1468C1(); // tgen
};
//SIG(1 S1468C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v82 v83 v84 v85 v86 v87 v88 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 v4 Fi[2] FC13{ BC14{ BC8}} Fi[4]}


 S1468C1 ::~S1468C1(){ note_dtor("S1468C1", this);}
void  S1468C1 ::v1(){vfunc_called(this, "_ZN7S1468C12v1Ev");}
void  S1468C1 ::v2(){vfunc_called(this, "_ZN7S1468C12v2Ev");}
void  S1468C1 ::v3(){vfunc_called(this, "_ZN7S1468C12v3Ev");}
void  S1468C1 ::v4(){vfunc_called(this, "_ZN7S1468C12v4Ev");}
S1468C1 ::S1468C1(){ note_ctor("S1468C1", this);} // tgen

static void Test_S1468C1()
{
  extern Class_Descriptor cd_S1468C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,59)];
    init_test(&cd_S1468C1, buf);
    S1468C1 *dp, &lv = *(dp=new (buf) S1468C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,232), "sizeof(S1468C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1468C1)");
    check_base_class_offset(lv, (S1468C4*)(S1468C3*)(S1468C2*), 0, "S1468C1");
    check_base_class_offset(lv, (S1468C3*)(S1468C2*), 0, "S1468C1");
    check_base_class_offset(lv, (S1468C2*), 0, "S1468C1");
    check_field_offset(lv, s1468c1f0, ABISELECT(252,196), "S1468C1.s1468c1f0");
    check_field_offset(lv, s1468c1f1, ABISELECT(264,204), "S1468C1.s1468c1f1");
    check_field_offset(lv, s1468c1f2, ABISELECT(280,216), "S1468C1.s1468c1f2");
    test_class_info(&lv, &cd_S1468C1);
    dp->~S1468C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1468C1(Test_S1468C1, "S1468C1", ABISELECT(296,232));

#else // __cplusplus

extern void _ZN7S1468C1C1Ev();
extern void _ZN7S1468C1D1Ev();
Name_Map name_map_S1468C1[] = {
  NSPAIR(_ZN7S1468C1C1Ev),
  NSPAIR(_ZN7S1468C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1468C4;
extern VTBL_ENTRY _ZTI7S1468C4[];
extern  VTBL_ENTRY _ZTV7S1468C4[];
extern Class_Descriptor cd_S1468C3;
extern VTBL_ENTRY _ZTI7S1468C3[];
extern  VTBL_ENTRY _ZTV7S1468C3[];
extern Class_Descriptor cd_S1468C2;
extern VTBL_ENTRY _ZTI7S1468C2[];
extern  VTBL_ENTRY _ZTV7S1468C2[];
static Base_Class bases_S1468C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1468C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1468C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1468C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1468C1[];
extern void _ZN7S1468C1D1Ev();
extern void _ZN7S1468C1D0Ev();
extern void _ZN7S1468C42v5Ev();
extern void _ZN7S1468C42v6Ev();
extern void _ZN7S1468C42v7Ev();
extern void _ZN7S1468C42v8Ev();
extern void _ZN7S1468C42v9Ev();
extern void _ZN7S1468C43v10Ev();
extern void _ZN7S1468C43v11Ev();
extern void _ZN7S1468C43v12Ev();
extern void _ZN7S1468C43v13Ev();
extern void _ZN7S1468C43v14Ev();
extern void _ZN7S1468C43v15Ev();
extern void _ZN7S1468C43v16Ev();
extern void _ZN7S1468C43v17Ev();
extern void _ZN7S1468C43v18Ev();
extern void _ZN7S1468C43v19Ev();
extern void _ZN7S1468C43v20Ev();
extern void _ZN7S1468C43v21Ev();
extern void _ZN7S1468C43v22Ev();
extern void _ZN7S1468C43v23Ev();
extern void _ZN7S1468C43v24Ev();
extern void _ZN7S1468C43v25Ev();
extern void _ZN7S1468C43v26Ev();
extern void _ZN7S1468C43v27Ev();
extern void _ZN7S1468C43v28Ev();
extern void _ZN7S1468C43v29Ev();
extern void _ZN7S1468C43v30Ev();
extern void _ZN7S1468C43v31Ev();
extern void _ZN7S1468C43v32Ev();
extern void _ZN7S1468C43v33Ev();
extern void _ZN7S1468C43v34Ev();
extern void _ZN7S1468C43v35Ev();
extern void _ZN7S1468C43v36Ev();
extern void _ZN7S1468C43v37Ev();
extern void _ZN7S1468C43v38Ev();
extern void _ZN7S1468C43v39Ev();
extern void _ZN7S1468C43v40Ev();
extern void _ZN7S1468C43v41Ev();
extern void _ZN7S1468C43v42Ev();
extern void _ZN7S1468C43v43Ev();
extern void _ZN7S1468C43v44Ev();
extern void _ZN7S1468C43v45Ev();
extern void _ZN7S1468C43v46Ev();
extern void _ZN7S1468C43v47Ev();
extern void _ZN7S1468C43v48Ev();
extern void _ZN7S1468C43v49Ev();
extern void _ZN7S1468C43v50Ev();
extern void _ZN7S1468C43v51Ev();
extern void _ZN7S1468C43v52Ev();
extern void _ZN7S1468C43v53Ev();
extern void _ZN7S1468C43v54Ev();
extern void _ZN7S1468C43v55Ev();
extern void _ZN7S1468C43v56Ev();
extern void _ZN7S1468C43v57Ev();
extern void _ZN7S1468C43v58Ev();
extern void _ZN7S1468C43v59Ev();
extern void _ZN7S1468C43v60Ev();
extern void _ZN7S1468C43v61Ev();
extern void _ZN7S1468C43v62Ev();
extern void _ZN7S1468C43v63Ev();
extern void _ZN7S1468C43v64Ev();
extern void _ZN7S1468C43v65Ev();
extern void _ZN7S1468C43v66Ev();
extern void _ZN7S1468C43v67Ev();
extern void _ZN7S1468C43v68Ev();
extern void _ZN7S1468C33v69Ev();
extern void _ZN7S1468C33v70Ev();
extern void _ZN7S1468C33v71Ev();
extern void _ZN7S1468C33v72Ev();
extern void _ZN7S1468C33v73Ev();
extern void _ZN7S1468C33v74Ev();
extern void _ZN7S1468C33v75Ev();
extern void _ZN7S1468C33v76Ev();
extern void _ZN7S1468C33v77Ev();
extern void _ZN7S1468C33v78Ev();
extern void _ZN7S1468C33v79Ev();
extern void _ZN7S1468C33v80Ev();
extern void _ZN7S1468C33v81Ev();
extern void _ZN7S1468C23v82Ev();
extern void _ZN7S1468C23v83Ev();
extern void _ZN7S1468C23v84Ev();
extern void _ZN7S1468C23v85Ev();
extern void _ZN7S1468C23v86Ev();
extern void _ZN7S1468C23v87Ev();
extern void _ZN7S1468C23v88Ev();
extern void _ZN7S1468C12v1Ev();
extern void _ZN7S1468C12v2Ev();
extern void _ZN7S1468C12v3Ev();
extern void _ZN7S1468C12v4Ev();
static  VTBL_ENTRY vtc_S1468C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1468C1[0]),
  (VTBL_ENTRY)&_ZN7S1468C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1468C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1468C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1468C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1468C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1468C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1468C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1468C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1468C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1468C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1468C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1468C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1468C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1468C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1468C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1468C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1468C1[];
extern  VTBL_ENTRY _ZTV7S1468C1[];
Class_Descriptor cd_S1468C1 = {  "S1468C1", // class name
  bases_S1468C1, 3,
  &(vtc_S1468C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,232), // object size
  NSPAIRA(_ZTI7S1468C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1468C1),92, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1429C4  {
  int s1429c4f0;
  __tsi64 s1429c4f1;
  void *s1429c4f2[4];
  int s1429c4f3[2];
  void *s1429c4f4;
  ::S3432C14_nt s1429c4f5;
  void *s1429c4f6[2];
  virtual  ~S1429C4(); // _ZN7S1429C4D1Ev
  virtual void  v4(); // _ZN7S1429C42v4Ev
  virtual void  v5(); // _ZN7S1429C42v5Ev
  virtual void  v6(); // _ZN7S1429C42v6Ev
  virtual void  v7(); // _ZN7S1429C42v7Ev
  virtual void  v8(); // _ZN7S1429C42v8Ev
  virtual void  v9(); // _ZN7S1429C42v9Ev
  virtual void  v10(); // _ZN7S1429C43v10Ev
  virtual void  v11(); // _ZN7S1429C43v11Ev
  virtual void  v12(); // _ZN7S1429C43v12Ev
  virtual void  v13(); // _ZN7S1429C43v13Ev
  virtual void  v14(); // _ZN7S1429C43v14Ev
  virtual void  v15(); // _ZN7S1429C43v15Ev
  virtual void  v16(); // _ZN7S1429C43v16Ev
  virtual void  v17(); // _ZN7S1429C43v17Ev
  virtual void  v18(); // _ZN7S1429C43v18Ev
  virtual void  v19(); // _ZN7S1429C43v19Ev
  virtual void  v20(); // _ZN7S1429C43v20Ev
  virtual void  v21(); // _ZN7S1429C43v21Ev
  virtual void  v22(); // _ZN7S1429C43v22Ev
  virtual void  v23(); // _ZN7S1429C43v23Ev
  virtual void  v24(); // _ZN7S1429C43v24Ev
  virtual void  v25(); // _ZN7S1429C43v25Ev
  virtual void  v26(); // _ZN7S1429C43v26Ev
  virtual void  v27(); // _ZN7S1429C43v27Ev
  virtual void  v28(); // _ZN7S1429C43v28Ev
  virtual void  v29(); // _ZN7S1429C43v29Ev
  virtual void  v30(); // _ZN7S1429C43v30Ev
  virtual void  v31(); // _ZN7S1429C43v31Ev
  virtual void  v32(); // _ZN7S1429C43v32Ev
  virtual void  v33(); // _ZN7S1429C43v33Ev
  virtual void  v34(); // _ZN7S1429C43v34Ev
  virtual void  v35(); // _ZN7S1429C43v35Ev
  virtual void  v36(); // _ZN7S1429C43v36Ev
  virtual void  v37(); // _ZN7S1429C43v37Ev
  virtual void  v38(); // _ZN7S1429C43v38Ev
  virtual void  v39(); // _ZN7S1429C43v39Ev
  virtual void  v40(); // _ZN7S1429C43v40Ev
  virtual void  v41(); // _ZN7S1429C43v41Ev
  virtual void  v42(); // _ZN7S1429C43v42Ev
  virtual void  v43(); // _ZN7S1429C43v43Ev
  virtual void  v44(); // _ZN7S1429C43v44Ev
  virtual void  v45(); // _ZN7S1429C43v45Ev
  virtual void  v46(); // _ZN7S1429C43v46Ev
  virtual void  v47(); // _ZN7S1429C43v47Ev
  virtual void  v48(); // _ZN7S1429C43v48Ev
  virtual void  v49(); // _ZN7S1429C43v49Ev
  virtual void  v50(); // _ZN7S1429C43v50Ev
  virtual void  v51(); // _ZN7S1429C43v51Ev
  virtual void  v52(); // _ZN7S1429C43v52Ev
  virtual void  v53(); // _ZN7S1429C43v53Ev
  virtual void  v54(); // _ZN7S1429C43v54Ev
  virtual void  v55(); // _ZN7S1429C43v55Ev
  virtual void  v56(); // _ZN7S1429C43v56Ev
  virtual void  v57(); // _ZN7S1429C43v57Ev
  virtual void  v58(); // _ZN7S1429C43v58Ev
  virtual void  v59(); // _ZN7S1429C43v59Ev
  virtual void  v60(); // _ZN7S1429C43v60Ev
  virtual void  v61(); // _ZN7S1429C43v61Ev
  virtual void  v62(); // _ZN7S1429C43v62Ev
  virtual void  v63(); // _ZN7S1429C43v63Ev
  virtual void  v64(); // _ZN7S1429C43v64Ev
  virtual void  v65(); // _ZN7S1429C43v65Ev
  virtual void  v66(); // _ZN7S1429C43v66Ev
  virtual void  v67(); // _ZN7S1429C43v67Ev
  S1429C4(); // tgen
};
//SIG(-1 S1429C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1429C4 ::~S1429C4(){ note_dtor("S1429C4", this);}
void  S1429C4 ::v4(){vfunc_called(this, "_ZN7S1429C42v4Ev");}
void  S1429C4 ::v5(){vfunc_called(this, "_ZN7S1429C42v5Ev");}
void  S1429C4 ::v6(){vfunc_called(this, "_ZN7S1429C42v6Ev");}
void  S1429C4 ::v7(){vfunc_called(this, "_ZN7S1429C42v7Ev");}
void  S1429C4 ::v8(){vfunc_called(this, "_ZN7S1429C42v8Ev");}
void  S1429C4 ::v9(){vfunc_called(this, "_ZN7S1429C42v9Ev");}
void  S1429C4 ::v10(){vfunc_called(this, "_ZN7S1429C43v10Ev");}
void  S1429C4 ::v11(){vfunc_called(this, "_ZN7S1429C43v11Ev");}
void  S1429C4 ::v12(){vfunc_called(this, "_ZN7S1429C43v12Ev");}
void  S1429C4 ::v13(){vfunc_called(this, "_ZN7S1429C43v13Ev");}
void  S1429C4 ::v14(){vfunc_called(this, "_ZN7S1429C43v14Ev");}
void  S1429C4 ::v15(){vfunc_called(this, "_ZN7S1429C43v15Ev");}
void  S1429C4 ::v16(){vfunc_called(this, "_ZN7S1429C43v16Ev");}
void  S1429C4 ::v17(){vfunc_called(this, "_ZN7S1429C43v17Ev");}
void  S1429C4 ::v18(){vfunc_called(this, "_ZN7S1429C43v18Ev");}
void  S1429C4 ::v19(){vfunc_called(this, "_ZN7S1429C43v19Ev");}
void  S1429C4 ::v20(){vfunc_called(this, "_ZN7S1429C43v20Ev");}
void  S1429C4 ::v21(){vfunc_called(this, "_ZN7S1429C43v21Ev");}
void  S1429C4 ::v22(){vfunc_called(this, "_ZN7S1429C43v22Ev");}
void  S1429C4 ::v23(){vfunc_called(this, "_ZN7S1429C43v23Ev");}
void  S1429C4 ::v24(){vfunc_called(this, "_ZN7S1429C43v24Ev");}
void  S1429C4 ::v25(){vfunc_called(this, "_ZN7S1429C43v25Ev");}
void  S1429C4 ::v26(){vfunc_called(this, "_ZN7S1429C43v26Ev");}
void  S1429C4 ::v27(){vfunc_called(this, "_ZN7S1429C43v27Ev");}
void  S1429C4 ::v28(){vfunc_called(this, "_ZN7S1429C43v28Ev");}
void  S1429C4 ::v29(){vfunc_called(this, "_ZN7S1429C43v29Ev");}
void  S1429C4 ::v30(){vfunc_called(this, "_ZN7S1429C43v30Ev");}
void  S1429C4 ::v31(){vfunc_called(this, "_ZN7S1429C43v31Ev");}
void  S1429C4 ::v32(){vfunc_called(this, "_ZN7S1429C43v32Ev");}
void  S1429C4 ::v33(){vfunc_called(this, "_ZN7S1429C43v33Ev");}
void  S1429C4 ::v34(){vfunc_called(this, "_ZN7S1429C43v34Ev");}
void  S1429C4 ::v35(){vfunc_called(this, "_ZN7S1429C43v35Ev");}
void  S1429C4 ::v36(){vfunc_called(this, "_ZN7S1429C43v36Ev");}
void  S1429C4 ::v37(){vfunc_called(this, "_ZN7S1429C43v37Ev");}
void  S1429C4 ::v38(){vfunc_called(this, "_ZN7S1429C43v38Ev");}
void  S1429C4 ::v39(){vfunc_called(this, "_ZN7S1429C43v39Ev");}
void  S1429C4 ::v40(){vfunc_called(this, "_ZN7S1429C43v40Ev");}
void  S1429C4 ::v41(){vfunc_called(this, "_ZN7S1429C43v41Ev");}
void  S1429C4 ::v42(){vfunc_called(this, "_ZN7S1429C43v42Ev");}
void  S1429C4 ::v43(){vfunc_called(this, "_ZN7S1429C43v43Ev");}
void  S1429C4 ::v44(){vfunc_called(this, "_ZN7S1429C43v44Ev");}
void  S1429C4 ::v45(){vfunc_called(this, "_ZN7S1429C43v45Ev");}
void  S1429C4 ::v46(){vfunc_called(this, "_ZN7S1429C43v46Ev");}
void  S1429C4 ::v47(){vfunc_called(this, "_ZN7S1429C43v47Ev");}
void  S1429C4 ::v48(){vfunc_called(this, "_ZN7S1429C43v48Ev");}
void  S1429C4 ::v49(){vfunc_called(this, "_ZN7S1429C43v49Ev");}
void  S1429C4 ::v50(){vfunc_called(this, "_ZN7S1429C43v50Ev");}
void  S1429C4 ::v51(){vfunc_called(this, "_ZN7S1429C43v51Ev");}
void  S1429C4 ::v52(){vfunc_called(this, "_ZN7S1429C43v52Ev");}
void  S1429C4 ::v53(){vfunc_called(this, "_ZN7S1429C43v53Ev");}
void  S1429C4 ::v54(){vfunc_called(this, "_ZN7S1429C43v54Ev");}
void  S1429C4 ::v55(){vfunc_called(this, "_ZN7S1429C43v55Ev");}
void  S1429C4 ::v56(){vfunc_called(this, "_ZN7S1429C43v56Ev");}
void  S1429C4 ::v57(){vfunc_called(this, "_ZN7S1429C43v57Ev");}
void  S1429C4 ::v58(){vfunc_called(this, "_ZN7S1429C43v58Ev");}
void  S1429C4 ::v59(){vfunc_called(this, "_ZN7S1429C43v59Ev");}
void  S1429C4 ::v60(){vfunc_called(this, "_ZN7S1429C43v60Ev");}
void  S1429C4 ::v61(){vfunc_called(this, "_ZN7S1429C43v61Ev");}
void  S1429C4 ::v62(){vfunc_called(this, "_ZN7S1429C43v62Ev");}
void  S1429C4 ::v63(){vfunc_called(this, "_ZN7S1429C43v63Ev");}
void  S1429C4 ::v64(){vfunc_called(this, "_ZN7S1429C43v64Ev");}
void  S1429C4 ::v65(){vfunc_called(this, "_ZN7S1429C43v65Ev");}
void  S1429C4 ::v66(){vfunc_called(this, "_ZN7S1429C43v66Ev");}
void  S1429C4 ::v67(){vfunc_called(this, "_ZN7S1429C43v67Ev");}
S1429C4 ::S1429C4(){ note_ctor("S1429C4", this);} // tgen

static void Test_S1429C4()
{
  extern Class_Descriptor cd_S1429C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1429C4, buf);
    S1429C4 *dp, &lv = *(dp=new (buf) S1429C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1429C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1429C4)");
    check_field_offset(lv, s1429c4f0, ABISELECT(8,4), "S1429C4.s1429c4f0");
    check_field_offset(lv, s1429c4f1, ABISELECT(16,8), "S1429C4.s1429c4f1");
    check_field_offset(lv, s1429c4f2, ABISELECT(24,16), "S1429C4.s1429c4f2");
    check_field_offset(lv, s1429c4f3, ABISELECT(56,32), "S1429C4.s1429c4f3");
    check_field_offset(lv, s1429c4f4, ABISELECT(64,40), "S1429C4.s1429c4f4");
    check_field_offset(lv, s1429c4f5, ABISELECT(72,44), "S1429C4.s1429c4f5");
    check_field_offset(lv, s1429c4f6, ABISELECT(80,52), "S1429C4.s1429c4f6");
    test_class_info(&lv, &cd_S1429C4);
    dp->~S1429C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1429C4(Test_S1429C4, "S1429C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1429C4C1Ev();
extern void _ZN7S1429C4D1Ev();
Name_Map name_map_S1429C4[] = {
  NSPAIR(_ZN7S1429C4C1Ev),
  NSPAIR(_ZN7S1429C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1429C4[];
extern void _ZN7S1429C4D1Ev();
extern void _ZN7S1429C4D0Ev();
extern void _ZN7S1429C42v4Ev();
extern void _ZN7S1429C42v5Ev();
extern void _ZN7S1429C42v6Ev();
extern void _ZN7S1429C42v7Ev();
extern void _ZN7S1429C42v8Ev();
extern void _ZN7S1429C42v9Ev();
extern void _ZN7S1429C43v10Ev();
extern void _ZN7S1429C43v11Ev();
extern void _ZN7S1429C43v12Ev();
extern void _ZN7S1429C43v13Ev();
extern void _ZN7S1429C43v14Ev();
extern void _ZN7S1429C43v15Ev();
extern void _ZN7S1429C43v16Ev();
extern void _ZN7S1429C43v17Ev();
extern void _ZN7S1429C43v18Ev();
extern void _ZN7S1429C43v19Ev();
extern void _ZN7S1429C43v20Ev();
extern void _ZN7S1429C43v21Ev();
extern void _ZN7S1429C43v22Ev();
extern void _ZN7S1429C43v23Ev();
extern void _ZN7S1429C43v24Ev();
extern void _ZN7S1429C43v25Ev();
extern void _ZN7S1429C43v26Ev();
extern void _ZN7S1429C43v27Ev();
extern void _ZN7S1429C43v28Ev();
extern void _ZN7S1429C43v29Ev();
extern void _ZN7S1429C43v30Ev();
extern void _ZN7S1429C43v31Ev();
extern void _ZN7S1429C43v32Ev();
extern void _ZN7S1429C43v33Ev();
extern void _ZN7S1429C43v34Ev();
extern void _ZN7S1429C43v35Ev();
extern void _ZN7S1429C43v36Ev();
extern void _ZN7S1429C43v37Ev();
extern void _ZN7S1429C43v38Ev();
extern void _ZN7S1429C43v39Ev();
extern void _ZN7S1429C43v40Ev();
extern void _ZN7S1429C43v41Ev();
extern void _ZN7S1429C43v42Ev();
extern void _ZN7S1429C43v43Ev();
extern void _ZN7S1429C43v44Ev();
extern void _ZN7S1429C43v45Ev();
extern void _ZN7S1429C43v46Ev();
extern void _ZN7S1429C43v47Ev();
extern void _ZN7S1429C43v48Ev();
extern void _ZN7S1429C43v49Ev();
extern void _ZN7S1429C43v50Ev();
extern void _ZN7S1429C43v51Ev();
extern void _ZN7S1429C43v52Ev();
extern void _ZN7S1429C43v53Ev();
extern void _ZN7S1429C43v54Ev();
extern void _ZN7S1429C43v55Ev();
extern void _ZN7S1429C43v56Ev();
extern void _ZN7S1429C43v57Ev();
extern void _ZN7S1429C43v58Ev();
extern void _ZN7S1429C43v59Ev();
extern void _ZN7S1429C43v60Ev();
extern void _ZN7S1429C43v61Ev();
extern void _ZN7S1429C43v62Ev();
extern void _ZN7S1429C43v63Ev();
extern void _ZN7S1429C43v64Ev();
extern void _ZN7S1429C43v65Ev();
extern void _ZN7S1429C43v66Ev();
extern void _ZN7S1429C43v67Ev();
static  VTBL_ENTRY vtc_S1429C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1429C4[0]),
  (VTBL_ENTRY)&_ZN7S1429C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1429C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v67Ev,
};
extern VTBL_ENTRY _ZTI7S1429C4[];
extern  VTBL_ENTRY _ZTV7S1429C4[];
Class_Descriptor cd_S1429C4 = {  "S1429C4", // class name
  0,0,//no base classes
  &(vtc_S1429C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1429C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1429C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1429C3  : S1429C4 {
  void *s1429c3f0;
  ::S3432C14_nt s1429c3f1;
  int s1429c3f2[5];
  unsigned int s1429c3f3:1;
  unsigned int s1429c3f4:1;
  unsigned int s1429c3f5:1;
  unsigned int s1429c3f6:1;
  unsigned int s1429c3f7:1;
  ::S273C21 s1429c3f8;
  ::S273C17 s1429c3f9;
  unsigned int s1429c3f10:1;
  int s1429c3f11[2];
  void *s1429c3f12;
  int s1429c3f13[3];
  virtual  ~S1429C3(); // _ZN7S1429C3D1Ev
  virtual void  v68(); // _ZN7S1429C33v68Ev
  virtual void  v69(); // _ZN7S1429C33v69Ev
  virtual void  v70(); // _ZN7S1429C33v70Ev
  virtual void  v71(); // _ZN7S1429C33v71Ev
  virtual void  v72(); // _ZN7S1429C33v72Ev
  virtual void  v73(); // _ZN7S1429C33v73Ev
  virtual void  v74(); // _ZN7S1429C33v74Ev
  virtual void  v75(); // _ZN7S1429C33v75Ev
  virtual void  v76(); // _ZN7S1429C33v76Ev
  virtual void  v77(); // _ZN7S1429C33v77Ev
  virtual void  v78(); // _ZN7S1429C33v78Ev
  virtual void  v79(); // _ZN7S1429C33v79Ev
  virtual void  v80(); // _ZN7S1429C33v80Ev
  S1429C3(); // tgen
};
//SIG(-1 S1429C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1429C3 ::~S1429C3(){ note_dtor("S1429C3", this);}
void  S1429C3 ::v68(){vfunc_called(this, "_ZN7S1429C33v68Ev");}
void  S1429C3 ::v69(){vfunc_called(this, "_ZN7S1429C33v69Ev");}
void  S1429C3 ::v70(){vfunc_called(this, "_ZN7S1429C33v70Ev");}
void  S1429C3 ::v71(){vfunc_called(this, "_ZN7S1429C33v71Ev");}
void  S1429C3 ::v72(){vfunc_called(this, "_ZN7S1429C33v72Ev");}
void  S1429C3 ::v73(){vfunc_called(this, "_ZN7S1429C33v73Ev");}
void  S1429C3 ::v74(){vfunc_called(this, "_ZN7S1429C33v74Ev");}
void  S1429C3 ::v75(){vfunc_called(this, "_ZN7S1429C33v75Ev");}
void  S1429C3 ::v76(){vfunc_called(this, "_ZN7S1429C33v76Ev");}
void  S1429C3 ::v77(){vfunc_called(this, "_ZN7S1429C33v77Ev");}
void  S1429C3 ::v78(){vfunc_called(this, "_ZN7S1429C33v78Ev");}
void  S1429C3 ::v79(){vfunc_called(this, "_ZN7S1429C33v79Ev");}
void  S1429C3 ::v80(){vfunc_called(this, "_ZN7S1429C33v80Ev");}
S1429C3 ::S1429C3(){ note_ctor("S1429C3", this);} // tgen

static void Test_S1429C3()
{
  extern Class_Descriptor cd_S1429C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1429C3, buf);
    S1429C3 *dp, &lv = *(dp=new (buf) S1429C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1429C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1429C3)");
    check_base_class_offset(lv, (S1429C4*), 0, "S1429C3");
    check_field_offset(lv, s1429c3f0, ABISELECT(96,60), "S1429C3.s1429c3f0");
    check_field_offset(lv, s1429c3f1, ABISELECT(104,64), "S1429C3.s1429c3f1");
    check_field_offset(lv, s1429c3f2, ABISELECT(112,72), "S1429C3.s1429c3f2");
    set_bf_and_test(lv, s1429c3f3, ABISELECT(132,92), 0, 1, 1, "S1429C3");
    set_bf_and_test(lv, s1429c3f4, ABISELECT(132,92), 1, 1, 1, "S1429C3");
    set_bf_and_test(lv, s1429c3f5, ABISELECT(132,92), 2, 1, 1, "S1429C3");
    set_bf_and_test(lv, s1429c3f6, ABISELECT(132,92), 3, 1, 1, "S1429C3");
    set_bf_and_test(lv, s1429c3f7, ABISELECT(132,92), 4, 1, 1, "S1429C3");
    check_field_offset(lv, s1429c3f8, ABISELECT(136,96), "S1429C3.s1429c3f8");
    check_field_offset(lv, s1429c3f9, ABISELECT(152,108), "S1429C3.s1429c3f9");
    set_bf_and_test(lv, s1429c3f10, ABISELECT(168,120), 0, 1, 1, "S1429C3");
    check_field_offset(lv, s1429c3f11, ABISELECT(172,124), "S1429C3.s1429c3f11");
    check_field_offset(lv, s1429c3f12, ABISELECT(184,132), "S1429C3.s1429c3f12");
    check_field_offset(lv, s1429c3f13, ABISELECT(192,136), "S1429C3.s1429c3f13");
    test_class_info(&lv, &cd_S1429C3);
    dp->~S1429C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1429C3(Test_S1429C3, "S1429C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1429C3C1Ev();
extern void _ZN7S1429C3D1Ev();
Name_Map name_map_S1429C3[] = {
  NSPAIR(_ZN7S1429C3C1Ev),
  NSPAIR(_ZN7S1429C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1429C4;
extern VTBL_ENTRY _ZTI7S1429C4[];
extern  VTBL_ENTRY _ZTV7S1429C4[];
static Base_Class bases_S1429C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1429C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1429C3[];
extern void _ZN7S1429C3D1Ev();
extern void _ZN7S1429C3D0Ev();
extern void _ZN7S1429C42v4Ev();
extern void _ZN7S1429C42v5Ev();
extern void _ZN7S1429C42v6Ev();
extern void _ZN7S1429C42v7Ev();
extern void _ZN7S1429C42v8Ev();
extern void _ZN7S1429C42v9Ev();
extern void _ZN7S1429C43v10Ev();
extern void _ZN7S1429C43v11Ev();
extern void _ZN7S1429C43v12Ev();
extern void _ZN7S1429C43v13Ev();
extern void _ZN7S1429C43v14Ev();
extern void _ZN7S1429C43v15Ev();
extern void _ZN7S1429C43v16Ev();
extern void _ZN7S1429C43v17Ev();
extern void _ZN7S1429C43v18Ev();
extern void _ZN7S1429C43v19Ev();
extern void _ZN7S1429C43v20Ev();
extern void _ZN7S1429C43v21Ev();
extern void _ZN7S1429C43v22Ev();
extern void _ZN7S1429C43v23Ev();
extern void _ZN7S1429C43v24Ev();
extern void _ZN7S1429C43v25Ev();
extern void _ZN7S1429C43v26Ev();
extern void _ZN7S1429C43v27Ev();
extern void _ZN7S1429C43v28Ev();
extern void _ZN7S1429C43v29Ev();
extern void _ZN7S1429C43v30Ev();
extern void _ZN7S1429C43v31Ev();
extern void _ZN7S1429C43v32Ev();
extern void _ZN7S1429C43v33Ev();
extern void _ZN7S1429C43v34Ev();
extern void _ZN7S1429C43v35Ev();
extern void _ZN7S1429C43v36Ev();
extern void _ZN7S1429C43v37Ev();
extern void _ZN7S1429C43v38Ev();
extern void _ZN7S1429C43v39Ev();
extern void _ZN7S1429C43v40Ev();
extern void _ZN7S1429C43v41Ev();
extern void _ZN7S1429C43v42Ev();
extern void _ZN7S1429C43v43Ev();
extern void _ZN7S1429C43v44Ev();
extern void _ZN7S1429C43v45Ev();
extern void _ZN7S1429C43v46Ev();
extern void _ZN7S1429C43v47Ev();
extern void _ZN7S1429C43v48Ev();
extern void _ZN7S1429C43v49Ev();
extern void _ZN7S1429C43v50Ev();
extern void _ZN7S1429C43v51Ev();
extern void _ZN7S1429C43v52Ev();
extern void _ZN7S1429C43v53Ev();
extern void _ZN7S1429C43v54Ev();
extern void _ZN7S1429C43v55Ev();
extern void _ZN7S1429C43v56Ev();
extern void _ZN7S1429C43v57Ev();
extern void _ZN7S1429C43v58Ev();
extern void _ZN7S1429C43v59Ev();
extern void _ZN7S1429C43v60Ev();
extern void _ZN7S1429C43v61Ev();
extern void _ZN7S1429C43v62Ev();
extern void _ZN7S1429C43v63Ev();
extern void _ZN7S1429C43v64Ev();
extern void _ZN7S1429C43v65Ev();
extern void _ZN7S1429C43v66Ev();
extern void _ZN7S1429C43v67Ev();
extern void _ZN7S1429C33v68Ev();
extern void _ZN7S1429C33v69Ev();
extern void _ZN7S1429C33v70Ev();
extern void _ZN7S1429C33v71Ev();
extern void _ZN7S1429C33v72Ev();
extern void _ZN7S1429C33v73Ev();
extern void _ZN7S1429C33v74Ev();
extern void _ZN7S1429C33v75Ev();
extern void _ZN7S1429C33v76Ev();
extern void _ZN7S1429C33v77Ev();
extern void _ZN7S1429C33v78Ev();
extern void _ZN7S1429C33v79Ev();
extern void _ZN7S1429C33v80Ev();
static  VTBL_ENTRY vtc_S1429C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1429C3[0]),
  (VTBL_ENTRY)&_ZN7S1429C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1429C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S1429C3[];
extern  VTBL_ENTRY _ZTV7S1429C3[];
Class_Descriptor cd_S1429C3 = {  "S1429C3", // class name
  bases_S1429C3, 1,
  &(vtc_S1429C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1429C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1429C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1429C2  : S1429C3 {
  unsigned int s1429c2f0:1;
  unsigned int s1429c2f1:1;
  unsigned int s1429c2f2:1;
  unsigned int s1429c2f3:1;
  ::S664C12_nt s1429c2f4;
  char s1429c2f5[2];
  ::S3432C14_nt s1429c2f6;
  ::S632C13 s1429c2f7;
  ::S3432C14_nt s1429c2f8;
  virtual  ~S1429C2(); // _ZN7S1429C2D1Ev
  virtual void  v81(); // _ZN7S1429C23v81Ev
  virtual void  v82(); // _ZN7S1429C23v82Ev
  virtual void  v83(); // _ZN7S1429C23v83Ev
  virtual void  v84(); // _ZN7S1429C23v84Ev
  virtual void  v85(); // _ZN7S1429C23v85Ev
  virtual void  v86(); // _ZN7S1429C23v86Ev
  virtual void  v87(); // _ZN7S1429C23v87Ev
  S1429C2(); // tgen
};
//SIG(-1 S1429C2) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S1429C2 ::~S1429C2(){ note_dtor("S1429C2", this);}
void  S1429C2 ::v81(){vfunc_called(this, "_ZN7S1429C23v81Ev");}
void  S1429C2 ::v82(){vfunc_called(this, "_ZN7S1429C23v82Ev");}
void  S1429C2 ::v83(){vfunc_called(this, "_ZN7S1429C23v83Ev");}
void  S1429C2 ::v84(){vfunc_called(this, "_ZN7S1429C23v84Ev");}
void  S1429C2 ::v85(){vfunc_called(this, "_ZN7S1429C23v85Ev");}
void  S1429C2 ::v86(){vfunc_called(this, "_ZN7S1429C23v86Ev");}
void  S1429C2 ::v87(){vfunc_called(this, "_ZN7S1429C23v87Ev");}
S1429C2 ::S1429C2(){ note_ctor("S1429C2", this);} // tgen

static void Test_S1429C2()
{
  extern Class_Descriptor cd_S1429C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1429C2, buf);
    S1429C2 *dp, &lv = *(dp=new (buf) S1429C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1429C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1429C2)");
    check_base_class_offset(lv, (S1429C4*)(S1429C3*), 0, "S1429C2");
    check_base_class_offset(lv, (S1429C3*), 0, "S1429C2");
    set_bf_and_test(lv, s1429c2f0, ABISELECT(204,148), 0, 1, 1, "S1429C2");
    set_bf_and_test(lv, s1429c2f1, ABISELECT(204,148), 1, 1, 1, "S1429C2");
    set_bf_and_test(lv, s1429c2f2, ABISELECT(204,148), 2, 1, 1, "S1429C2");
    set_bf_and_test(lv, s1429c2f3, ABISELECT(204,148), 3, 1, 1, "S1429C2");
    check_field_offset(lv, s1429c2f4, ABISELECT(208,152), "S1429C2.s1429c2f4");
    check_field_offset(lv, s1429c2f5, ABISELECT(220,164), "S1429C2.s1429c2f5");
    check_field_offset(lv, s1429c2f6, ABISELECT(224,168), "S1429C2.s1429c2f6");
    check_field_offset(lv, s1429c2f7, ABISELECT(232,176), "S1429C2.s1429c2f7");
    check_field_offset(lv, s1429c2f8, ABISELECT(244,188), "S1429C2.s1429c2f8");
    test_class_info(&lv, &cd_S1429C2);
    dp->~S1429C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1429C2(Test_S1429C2, "S1429C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1429C2C1Ev();
extern void _ZN7S1429C2D1Ev();
Name_Map name_map_S1429C2[] = {
  NSPAIR(_ZN7S1429C2C1Ev),
  NSPAIR(_ZN7S1429C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1429C4;
extern VTBL_ENTRY _ZTI7S1429C4[];
extern  VTBL_ENTRY _ZTV7S1429C4[];
extern Class_Descriptor cd_S1429C3;
extern VTBL_ENTRY _ZTI7S1429C3[];
extern  VTBL_ENTRY _ZTV7S1429C3[];
static Base_Class bases_S1429C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1429C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1429C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1429C2[];
extern void _ZN7S1429C2D1Ev();
extern void _ZN7S1429C2D0Ev();
extern void _ZN7S1429C42v4Ev();
extern void _ZN7S1429C42v5Ev();
extern void _ZN7S1429C42v6Ev();
extern void _ZN7S1429C42v7Ev();
extern void _ZN7S1429C42v8Ev();
extern void _ZN7S1429C42v9Ev();
extern void _ZN7S1429C43v10Ev();
extern void _ZN7S1429C43v11Ev();
extern void _ZN7S1429C43v12Ev();
extern void _ZN7S1429C43v13Ev();
extern void _ZN7S1429C43v14Ev();
extern void _ZN7S1429C43v15Ev();
extern void _ZN7S1429C43v16Ev();
extern void _ZN7S1429C43v17Ev();
extern void _ZN7S1429C43v18Ev();
extern void _ZN7S1429C43v19Ev();
extern void _ZN7S1429C43v20Ev();
extern void _ZN7S1429C43v21Ev();
extern void _ZN7S1429C43v22Ev();
extern void _ZN7S1429C43v23Ev();
extern void _ZN7S1429C43v24Ev();
extern void _ZN7S1429C43v25Ev();
extern void _ZN7S1429C43v26Ev();
extern void _ZN7S1429C43v27Ev();
extern void _ZN7S1429C43v28Ev();
extern void _ZN7S1429C43v29Ev();
extern void _ZN7S1429C43v30Ev();
extern void _ZN7S1429C43v31Ev();
extern void _ZN7S1429C43v32Ev();
extern void _ZN7S1429C43v33Ev();
extern void _ZN7S1429C43v34Ev();
extern void _ZN7S1429C43v35Ev();
extern void _ZN7S1429C43v36Ev();
extern void _ZN7S1429C43v37Ev();
extern void _ZN7S1429C43v38Ev();
extern void _ZN7S1429C43v39Ev();
extern void _ZN7S1429C43v40Ev();
extern void _ZN7S1429C43v41Ev();
extern void _ZN7S1429C43v42Ev();
extern void _ZN7S1429C43v43Ev();
extern void _ZN7S1429C43v44Ev();
extern void _ZN7S1429C43v45Ev();
extern void _ZN7S1429C43v46Ev();
extern void _ZN7S1429C43v47Ev();
extern void _ZN7S1429C43v48Ev();
extern void _ZN7S1429C43v49Ev();
extern void _ZN7S1429C43v50Ev();
extern void _ZN7S1429C43v51Ev();
extern void _ZN7S1429C43v52Ev();
extern void _ZN7S1429C43v53Ev();
extern void _ZN7S1429C43v54Ev();
extern void _ZN7S1429C43v55Ev();
extern void _ZN7S1429C43v56Ev();
extern void _ZN7S1429C43v57Ev();
extern void _ZN7S1429C43v58Ev();
extern void _ZN7S1429C43v59Ev();
extern void _ZN7S1429C43v60Ev();
extern void _ZN7S1429C43v61Ev();
extern void _ZN7S1429C43v62Ev();
extern void _ZN7S1429C43v63Ev();
extern void _ZN7S1429C43v64Ev();
extern void _ZN7S1429C43v65Ev();
extern void _ZN7S1429C43v66Ev();
extern void _ZN7S1429C43v67Ev();
extern void _ZN7S1429C33v68Ev();
extern void _ZN7S1429C33v69Ev();
extern void _ZN7S1429C33v70Ev();
extern void _ZN7S1429C33v71Ev();
extern void _ZN7S1429C33v72Ev();
extern void _ZN7S1429C33v73Ev();
extern void _ZN7S1429C33v74Ev();
extern void _ZN7S1429C33v75Ev();
extern void _ZN7S1429C33v76Ev();
extern void _ZN7S1429C33v77Ev();
extern void _ZN7S1429C33v78Ev();
extern void _ZN7S1429C33v79Ev();
extern void _ZN7S1429C33v80Ev();
extern void _ZN7S1429C23v81Ev();
extern void _ZN7S1429C23v82Ev();
extern void _ZN7S1429C23v83Ev();
extern void _ZN7S1429C23v84Ev();
extern void _ZN7S1429C23v85Ev();
extern void _ZN7S1429C23v86Ev();
extern void _ZN7S1429C23v87Ev();
static  VTBL_ENTRY vtc_S1429C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1429C2[0]),
  (VTBL_ENTRY)&_ZN7S1429C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1429C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1429C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1429C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1429C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1429C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1429C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1429C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1429C23v87Ev,
};
extern VTBL_ENTRY _ZTI7S1429C2[];
extern  VTBL_ENTRY _ZTV7S1429C2[];
Class_Descriptor cd_S1429C2 = {  "S1429C2", // class name
  bases_S1429C2, 2,
  &(vtc_S1429C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1429C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1429C2),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1429C1  : S1429C2 {
  int s1429c1f0[3];
  char s1429c1f1[2];
  int s1429c1f2;
  unsigned int s1429c1f3:1;
  unsigned int s1429c1f4:1;
  virtual  ~S1429C1(); // _ZN7S1429C1D1Ev
  virtual void  v1(); // _ZN7S1429C12v1Ev
  virtual void  v2(); // _ZN7S1429C12v2Ev
  virtual void  v3(); // _ZN7S1429C12v3Ev
  S1429C1(); // tgen
};
//SIG(1 S1429C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 Fi[3] Fc[2] Fi Fi:1 Fi:1}


 S1429C1 ::~S1429C1(){ note_dtor("S1429C1", this);}
void  S1429C1 ::v1(){vfunc_called(this, "_ZN7S1429C12v1Ev");}
void  S1429C1 ::v2(){vfunc_called(this, "_ZN7S1429C12v2Ev");}
void  S1429C1 ::v3(){vfunc_called(this, "_ZN7S1429C12v3Ev");}
S1429C1 ::S1429C1(){ note_ctor("S1429C1", this);} // tgen

static void Test_S1429C1()
{
  extern Class_Descriptor cd_S1429C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,56)];
    init_test(&cd_S1429C1, buf);
    S1429C1 *dp, &lv = *(dp=new (buf) S1429C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,220), "sizeof(S1429C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1429C1)");
    check_base_class_offset(lv, (S1429C4*)(S1429C3*)(S1429C2*), 0, "S1429C1");
    check_base_class_offset(lv, (S1429C3*)(S1429C2*), 0, "S1429C1");
    check_base_class_offset(lv, (S1429C2*), 0, "S1429C1");
    check_field_offset(lv, s1429c1f0, ABISELECT(252,196), "S1429C1.s1429c1f0");
    check_field_offset(lv, s1429c1f1, ABISELECT(264,208), "S1429C1.s1429c1f1");
    check_field_offset(lv, s1429c1f2, ABISELECT(268,212), "S1429C1.s1429c1f2");
    set_bf_and_test(lv, s1429c1f3, ABISELECT(272,216), 0, 1, 1, "S1429C1");
    set_bf_and_test(lv, s1429c1f4, ABISELECT(272,216), 1, 1, 1, "S1429C1");
    test_class_info(&lv, &cd_S1429C1);
    dp->~S1429C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1429C1(Test_S1429C1, "S1429C1", ABISELECT(280,220));

#else // __cplusplus

extern void _ZN7S1429C1C1Ev();
extern void _ZN7S1429C1D1Ev();
Name_Map name_map_S1429C1[] = {
  NSPAIR(_ZN7S1429C1C1Ev),
  NSPAIR(_ZN7S1429C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1429C4;
extern VTBL_ENTRY _ZTI7S1429C4[];
extern  VTBL_ENTRY _ZTV7S1429C4[];
extern Class_Descriptor cd_S1429C3;
extern VTBL_ENTRY _ZTI7S1429C3[];
extern  VTBL_ENTRY _ZTV7S1429C3[];
extern Class_Descriptor cd_S1429C2;
extern VTBL_ENTRY _ZTI7S1429C2[];
extern  VTBL_ENTRY _ZTV7S1429C2[];
static Base_Class bases_S1429C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1429C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1429C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1429C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1429C1[];
extern void _ZN7S1429C1D1Ev();
extern void _ZN7S1429C1D0Ev();
extern void _ZN7S1429C42v4Ev();
extern void _ZN7S1429C42v5Ev();
extern void _ZN7S1429C42v6Ev();
extern void _ZN7S1429C42v7Ev();
extern void _ZN7S1429C42v8Ev();
extern void _ZN7S1429C42v9Ev();
extern void _ZN7S1429C43v10Ev();
extern void _ZN7S1429C43v11Ev();
extern void _ZN7S1429C43v12Ev();
extern void _ZN7S1429C43v13Ev();
extern void _ZN7S1429C43v14Ev();
extern void _ZN7S1429C43v15Ev();
extern void _ZN7S1429C43v16Ev();
extern void _ZN7S1429C43v17Ev();
extern void _ZN7S1429C43v18Ev();
extern void _ZN7S1429C43v19Ev();
extern void _ZN7S1429C43v20Ev();
extern void _ZN7S1429C43v21Ev();
extern void _ZN7S1429C43v22Ev();
extern void _ZN7S1429C43v23Ev();
extern void _ZN7S1429C43v24Ev();
extern void _ZN7S1429C43v25Ev();
extern void _ZN7S1429C43v26Ev();
extern void _ZN7S1429C43v27Ev();
extern void _ZN7S1429C43v28Ev();
extern void _ZN7S1429C43v29Ev();
extern void _ZN7S1429C43v30Ev();
extern void _ZN7S1429C43v31Ev();
extern void _ZN7S1429C43v32Ev();
extern void _ZN7S1429C43v33Ev();
extern void _ZN7S1429C43v34Ev();
extern void _ZN7S1429C43v35Ev();
extern void _ZN7S1429C43v36Ev();
extern void _ZN7S1429C43v37Ev();
extern void _ZN7S1429C43v38Ev();
extern void _ZN7S1429C43v39Ev();
extern void _ZN7S1429C43v40Ev();
extern void _ZN7S1429C43v41Ev();
extern void _ZN7S1429C43v42Ev();
extern void _ZN7S1429C43v43Ev();
extern void _ZN7S1429C43v44Ev();
extern void _ZN7S1429C43v45Ev();
extern void _ZN7S1429C43v46Ev();
extern void _ZN7S1429C43v47Ev();
extern void _ZN7S1429C43v48Ev();
extern void _ZN7S1429C43v49Ev();
extern void _ZN7S1429C43v50Ev();
extern void _ZN7S1429C43v51Ev();
extern void _ZN7S1429C43v52Ev();
extern void _ZN7S1429C43v53Ev();
extern void _ZN7S1429C43v54Ev();
extern void _ZN7S1429C43v55Ev();
extern void _ZN7S1429C43v56Ev();
extern void _ZN7S1429C43v57Ev();
extern void _ZN7S1429C43v58Ev();
extern void _ZN7S1429C43v59Ev();
extern void _ZN7S1429C43v60Ev();
extern void _ZN7S1429C43v61Ev();
extern void _ZN7S1429C43v62Ev();
extern void _ZN7S1429C43v63Ev();
extern void _ZN7S1429C43v64Ev();
extern void _ZN7S1429C43v65Ev();
extern void _ZN7S1429C43v66Ev();
extern void _ZN7S1429C43v67Ev();
extern void _ZN7S1429C33v68Ev();
extern void _ZN7S1429C33v69Ev();
extern void _ZN7S1429C33v70Ev();
extern void _ZN7S1429C33v71Ev();
extern void _ZN7S1429C33v72Ev();
extern void _ZN7S1429C33v73Ev();
extern void _ZN7S1429C33v74Ev();
extern void _ZN7S1429C33v75Ev();
extern void _ZN7S1429C33v76Ev();
extern void _ZN7S1429C33v77Ev();
extern void _ZN7S1429C33v78Ev();
extern void _ZN7S1429C33v79Ev();
extern void _ZN7S1429C33v80Ev();
extern void _ZN7S1429C23v81Ev();
extern void _ZN7S1429C23v82Ev();
extern void _ZN7S1429C23v83Ev();
extern void _ZN7S1429C23v84Ev();
extern void _ZN7S1429C23v85Ev();
extern void _ZN7S1429C23v86Ev();
extern void _ZN7S1429C23v87Ev();
extern void _ZN7S1429C12v1Ev();
extern void _ZN7S1429C12v2Ev();
extern void _ZN7S1429C12v3Ev();
static  VTBL_ENTRY vtc_S1429C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1429C1[0]),
  (VTBL_ENTRY)&_ZN7S1429C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1429C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1429C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1429C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1429C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1429C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1429C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1429C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1429C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1429C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1429C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1429C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1429C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1429C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1429C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1429C1[];
extern  VTBL_ENTRY _ZTV7S1429C1[];
Class_Descriptor cd_S1429C1 = {  "S1429C1", // class name
  bases_S1429C1, 3,
  &(vtc_S1429C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,220), // object size
  NSPAIRA(_ZTI7S1429C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1429C1),91, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1426C4  {
  int s1426c4f0;
  __tsi64 s1426c4f1;
  void *s1426c4f2[4];
  int s1426c4f3[2];
  void *s1426c4f4;
  ::S3432C14_nt s1426c4f5;
  void *s1426c4f6[2];
  virtual  ~S1426C4(); // _ZN7S1426C4D1Ev
  virtual void  v4(); // _ZN7S1426C42v4Ev
  virtual void  v5(); // _ZN7S1426C42v5Ev
  virtual void  v6(); // _ZN7S1426C42v6Ev
  virtual void  v7(); // _ZN7S1426C42v7Ev
  virtual void  v8(); // _ZN7S1426C42v8Ev
  virtual void  v9(); // _ZN7S1426C42v9Ev
  virtual void  v10(); // _ZN7S1426C43v10Ev
  virtual void  v11(); // _ZN7S1426C43v11Ev
  virtual void  v12(); // _ZN7S1426C43v12Ev
  virtual void  v13(); // _ZN7S1426C43v13Ev
  virtual void  v14(); // _ZN7S1426C43v14Ev
  virtual void  v15(); // _ZN7S1426C43v15Ev
  virtual void  v16(); // _ZN7S1426C43v16Ev
  virtual void  v17(); // _ZN7S1426C43v17Ev
  virtual void  v18(); // _ZN7S1426C43v18Ev
  virtual void  v19(); // _ZN7S1426C43v19Ev
  virtual void  v20(); // _ZN7S1426C43v20Ev
  virtual void  v21(); // _ZN7S1426C43v21Ev
  virtual void  v22(); // _ZN7S1426C43v22Ev
  virtual void  v23(); // _ZN7S1426C43v23Ev
  virtual void  v24(); // _ZN7S1426C43v24Ev
  virtual void  v25(); // _ZN7S1426C43v25Ev
  virtual void  v26(); // _ZN7S1426C43v26Ev
  virtual void  v27(); // _ZN7S1426C43v27Ev
  virtual void  v28(); // _ZN7S1426C43v28Ev
  virtual void  v29(); // _ZN7S1426C43v29Ev
  virtual void  v30(); // _ZN7S1426C43v30Ev
  virtual void  v31(); // _ZN7S1426C43v31Ev
  virtual void  v32(); // _ZN7S1426C43v32Ev
  virtual void  v33(); // _ZN7S1426C43v33Ev
  virtual void  v34(); // _ZN7S1426C43v34Ev
  virtual void  v35(); // _ZN7S1426C43v35Ev
  virtual void  v36(); // _ZN7S1426C43v36Ev
  virtual void  v37(); // _ZN7S1426C43v37Ev
  virtual void  v38(); // _ZN7S1426C43v38Ev
  virtual void  v39(); // _ZN7S1426C43v39Ev
  virtual void  v40(); // _ZN7S1426C43v40Ev
  virtual void  v41(); // _ZN7S1426C43v41Ev
  virtual void  v42(); // _ZN7S1426C43v42Ev
  virtual void  v43(); // _ZN7S1426C43v43Ev
  virtual void  v44(); // _ZN7S1426C43v44Ev
  virtual void  v45(); // _ZN7S1426C43v45Ev
  virtual void  v46(); // _ZN7S1426C43v46Ev
  virtual void  v47(); // _ZN7S1426C43v47Ev
  virtual void  v48(); // _ZN7S1426C43v48Ev
  virtual void  v49(); // _ZN7S1426C43v49Ev
  virtual void  v50(); // _ZN7S1426C43v50Ev
  virtual void  v51(); // _ZN7S1426C43v51Ev
  virtual void  v52(); // _ZN7S1426C43v52Ev
  virtual void  v53(); // _ZN7S1426C43v53Ev
  virtual void  v54(); // _ZN7S1426C43v54Ev
  virtual void  v55(); // _ZN7S1426C43v55Ev
  virtual void  v56(); // _ZN7S1426C43v56Ev
  virtual void  v57(); // _ZN7S1426C43v57Ev
  virtual void  v58(); // _ZN7S1426C43v58Ev
  virtual void  v59(); // _ZN7S1426C43v59Ev
  virtual void  v60(); // _ZN7S1426C43v60Ev
  virtual void  v61(); // _ZN7S1426C43v61Ev
  virtual void  v62(); // _ZN7S1426C43v62Ev
  virtual void  v63(); // _ZN7S1426C43v63Ev
  virtual void  v64(); // _ZN7S1426C43v64Ev
  virtual void  v65(); // _ZN7S1426C43v65Ev
  virtual void  v66(); // _ZN7S1426C43v66Ev
  virtual void  v67(); // _ZN7S1426C43v67Ev
  S1426C4(); // tgen
};
//SIG(-1 S1426C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1426C4 ::~S1426C4(){ note_dtor("S1426C4", this);}
void  S1426C4 ::v4(){vfunc_called(this, "_ZN7S1426C42v4Ev");}
void  S1426C4 ::v5(){vfunc_called(this, "_ZN7S1426C42v5Ev");}
void  S1426C4 ::v6(){vfunc_called(this, "_ZN7S1426C42v6Ev");}
void  S1426C4 ::v7(){vfunc_called(this, "_ZN7S1426C42v7Ev");}
void  S1426C4 ::v8(){vfunc_called(this, "_ZN7S1426C42v8Ev");}
void  S1426C4 ::v9(){vfunc_called(this, "_ZN7S1426C42v9Ev");}
void  S1426C4 ::v10(){vfunc_called(this, "_ZN7S1426C43v10Ev");}
void  S1426C4 ::v11(){vfunc_called(this, "_ZN7S1426C43v11Ev");}
void  S1426C4 ::v12(){vfunc_called(this, "_ZN7S1426C43v12Ev");}
void  S1426C4 ::v13(){vfunc_called(this, "_ZN7S1426C43v13Ev");}
void  S1426C4 ::v14(){vfunc_called(this, "_ZN7S1426C43v14Ev");}
void  S1426C4 ::v15(){vfunc_called(this, "_ZN7S1426C43v15Ev");}
void  S1426C4 ::v16(){vfunc_called(this, "_ZN7S1426C43v16Ev");}
void  S1426C4 ::v17(){vfunc_called(this, "_ZN7S1426C43v17Ev");}
void  S1426C4 ::v18(){vfunc_called(this, "_ZN7S1426C43v18Ev");}
void  S1426C4 ::v19(){vfunc_called(this, "_ZN7S1426C43v19Ev");}
void  S1426C4 ::v20(){vfunc_called(this, "_ZN7S1426C43v20Ev");}
void  S1426C4 ::v21(){vfunc_called(this, "_ZN7S1426C43v21Ev");}
void  S1426C4 ::v22(){vfunc_called(this, "_ZN7S1426C43v22Ev");}
void  S1426C4 ::v23(){vfunc_called(this, "_ZN7S1426C43v23Ev");}
void  S1426C4 ::v24(){vfunc_called(this, "_ZN7S1426C43v24Ev");}
void  S1426C4 ::v25(){vfunc_called(this, "_ZN7S1426C43v25Ev");}
void  S1426C4 ::v26(){vfunc_called(this, "_ZN7S1426C43v26Ev");}
void  S1426C4 ::v27(){vfunc_called(this, "_ZN7S1426C43v27Ev");}
void  S1426C4 ::v28(){vfunc_called(this, "_ZN7S1426C43v28Ev");}
void  S1426C4 ::v29(){vfunc_called(this, "_ZN7S1426C43v29Ev");}
void  S1426C4 ::v30(){vfunc_called(this, "_ZN7S1426C43v30Ev");}
void  S1426C4 ::v31(){vfunc_called(this, "_ZN7S1426C43v31Ev");}
void  S1426C4 ::v32(){vfunc_called(this, "_ZN7S1426C43v32Ev");}
void  S1426C4 ::v33(){vfunc_called(this, "_ZN7S1426C43v33Ev");}
void  S1426C4 ::v34(){vfunc_called(this, "_ZN7S1426C43v34Ev");}
void  S1426C4 ::v35(){vfunc_called(this, "_ZN7S1426C43v35Ev");}
void  S1426C4 ::v36(){vfunc_called(this, "_ZN7S1426C43v36Ev");}
void  S1426C4 ::v37(){vfunc_called(this, "_ZN7S1426C43v37Ev");}
void  S1426C4 ::v38(){vfunc_called(this, "_ZN7S1426C43v38Ev");}
void  S1426C4 ::v39(){vfunc_called(this, "_ZN7S1426C43v39Ev");}
void  S1426C4 ::v40(){vfunc_called(this, "_ZN7S1426C43v40Ev");}
void  S1426C4 ::v41(){vfunc_called(this, "_ZN7S1426C43v41Ev");}
void  S1426C4 ::v42(){vfunc_called(this, "_ZN7S1426C43v42Ev");}
void  S1426C4 ::v43(){vfunc_called(this, "_ZN7S1426C43v43Ev");}
void  S1426C4 ::v44(){vfunc_called(this, "_ZN7S1426C43v44Ev");}
void  S1426C4 ::v45(){vfunc_called(this, "_ZN7S1426C43v45Ev");}
void  S1426C4 ::v46(){vfunc_called(this, "_ZN7S1426C43v46Ev");}
void  S1426C4 ::v47(){vfunc_called(this, "_ZN7S1426C43v47Ev");}
void  S1426C4 ::v48(){vfunc_called(this, "_ZN7S1426C43v48Ev");}
void  S1426C4 ::v49(){vfunc_called(this, "_ZN7S1426C43v49Ev");}
void  S1426C4 ::v50(){vfunc_called(this, "_ZN7S1426C43v50Ev");}
void  S1426C4 ::v51(){vfunc_called(this, "_ZN7S1426C43v51Ev");}
void  S1426C4 ::v52(){vfunc_called(this, "_ZN7S1426C43v52Ev");}
void  S1426C4 ::v53(){vfunc_called(this, "_ZN7S1426C43v53Ev");}
void  S1426C4 ::v54(){vfunc_called(this, "_ZN7S1426C43v54Ev");}
void  S1426C4 ::v55(){vfunc_called(this, "_ZN7S1426C43v55Ev");}
void  S1426C4 ::v56(){vfunc_called(this, "_ZN7S1426C43v56Ev");}
void  S1426C4 ::v57(){vfunc_called(this, "_ZN7S1426C43v57Ev");}
void  S1426C4 ::v58(){vfunc_called(this, "_ZN7S1426C43v58Ev");}
void  S1426C4 ::v59(){vfunc_called(this, "_ZN7S1426C43v59Ev");}
void  S1426C4 ::v60(){vfunc_called(this, "_ZN7S1426C43v60Ev");}
void  S1426C4 ::v61(){vfunc_called(this, "_ZN7S1426C43v61Ev");}
void  S1426C4 ::v62(){vfunc_called(this, "_ZN7S1426C43v62Ev");}
void  S1426C4 ::v63(){vfunc_called(this, "_ZN7S1426C43v63Ev");}
void  S1426C4 ::v64(){vfunc_called(this, "_ZN7S1426C43v64Ev");}
void  S1426C4 ::v65(){vfunc_called(this, "_ZN7S1426C43v65Ev");}
void  S1426C4 ::v66(){vfunc_called(this, "_ZN7S1426C43v66Ev");}
void  S1426C4 ::v67(){vfunc_called(this, "_ZN7S1426C43v67Ev");}
S1426C4 ::S1426C4(){ note_ctor("S1426C4", this);} // tgen

static void Test_S1426C4()
{
  extern Class_Descriptor cd_S1426C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1426C4, buf);
    S1426C4 *dp, &lv = *(dp=new (buf) S1426C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1426C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1426C4)");
    check_field_offset(lv, s1426c4f0, ABISELECT(8,4), "S1426C4.s1426c4f0");
    check_field_offset(lv, s1426c4f1, ABISELECT(16,8), "S1426C4.s1426c4f1");
    check_field_offset(lv, s1426c4f2, ABISELECT(24,16), "S1426C4.s1426c4f2");
    check_field_offset(lv, s1426c4f3, ABISELECT(56,32), "S1426C4.s1426c4f3");
    check_field_offset(lv, s1426c4f4, ABISELECT(64,40), "S1426C4.s1426c4f4");
    check_field_offset(lv, s1426c4f5, ABISELECT(72,44), "S1426C4.s1426c4f5");
    check_field_offset(lv, s1426c4f6, ABISELECT(80,52), "S1426C4.s1426c4f6");
    test_class_info(&lv, &cd_S1426C4);
    dp->~S1426C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1426C4(Test_S1426C4, "S1426C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1426C4C1Ev();
extern void _ZN7S1426C4D1Ev();
Name_Map name_map_S1426C4[] = {
  NSPAIR(_ZN7S1426C4C1Ev),
  NSPAIR(_ZN7S1426C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1426C4[];
extern void _ZN7S1426C4D1Ev();
extern void _ZN7S1426C4D0Ev();
extern void _ZN7S1426C42v4Ev();
extern void _ZN7S1426C42v5Ev();
extern void _ZN7S1426C42v6Ev();
extern void _ZN7S1426C42v7Ev();
extern void _ZN7S1426C42v8Ev();
extern void _ZN7S1426C42v9Ev();
extern void _ZN7S1426C43v10Ev();
extern void _ZN7S1426C43v11Ev();
extern void _ZN7S1426C43v12Ev();
extern void _ZN7S1426C43v13Ev();
extern void _ZN7S1426C43v14Ev();
extern void _ZN7S1426C43v15Ev();
extern void _ZN7S1426C43v16Ev();
extern void _ZN7S1426C43v17Ev();
extern void _ZN7S1426C43v18Ev();
extern void _ZN7S1426C43v19Ev();
extern void _ZN7S1426C43v20Ev();
extern void _ZN7S1426C43v21Ev();
extern void _ZN7S1426C43v22Ev();
extern void _ZN7S1426C43v23Ev();
extern void _ZN7S1426C43v24Ev();
extern void _ZN7S1426C43v25Ev();
extern void _ZN7S1426C43v26Ev();
extern void _ZN7S1426C43v27Ev();
extern void _ZN7S1426C43v28Ev();
extern void _ZN7S1426C43v29Ev();
extern void _ZN7S1426C43v30Ev();
extern void _ZN7S1426C43v31Ev();
extern void _ZN7S1426C43v32Ev();
extern void _ZN7S1426C43v33Ev();
extern void _ZN7S1426C43v34Ev();
extern void _ZN7S1426C43v35Ev();
extern void _ZN7S1426C43v36Ev();
extern void _ZN7S1426C43v37Ev();
extern void _ZN7S1426C43v38Ev();
extern void _ZN7S1426C43v39Ev();
extern void _ZN7S1426C43v40Ev();
extern void _ZN7S1426C43v41Ev();
extern void _ZN7S1426C43v42Ev();
extern void _ZN7S1426C43v43Ev();
extern void _ZN7S1426C43v44Ev();
extern void _ZN7S1426C43v45Ev();
extern void _ZN7S1426C43v46Ev();
extern void _ZN7S1426C43v47Ev();
extern void _ZN7S1426C43v48Ev();
extern void _ZN7S1426C43v49Ev();
extern void _ZN7S1426C43v50Ev();
extern void _ZN7S1426C43v51Ev();
extern void _ZN7S1426C43v52Ev();
extern void _ZN7S1426C43v53Ev();
extern void _ZN7S1426C43v54Ev();
extern void _ZN7S1426C43v55Ev();
extern void _ZN7S1426C43v56Ev();
extern void _ZN7S1426C43v57Ev();
extern void _ZN7S1426C43v58Ev();
extern void _ZN7S1426C43v59Ev();
extern void _ZN7S1426C43v60Ev();
extern void _ZN7S1426C43v61Ev();
extern void _ZN7S1426C43v62Ev();
extern void _ZN7S1426C43v63Ev();
extern void _ZN7S1426C43v64Ev();
extern void _ZN7S1426C43v65Ev();
extern void _ZN7S1426C43v66Ev();
extern void _ZN7S1426C43v67Ev();
static  VTBL_ENTRY vtc_S1426C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1426C4[0]),
  (VTBL_ENTRY)&_ZN7S1426C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1426C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v67Ev,
};
extern VTBL_ENTRY _ZTI7S1426C4[];
extern  VTBL_ENTRY _ZTV7S1426C4[];
Class_Descriptor cd_S1426C4 = {  "S1426C4", // class name
  0,0,//no base classes
  &(vtc_S1426C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1426C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1426C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1426C3  : S1426C4 {
  void *s1426c3f0;
  ::S3432C14_nt s1426c3f1;
  int s1426c3f2[5];
  unsigned int s1426c3f3:1;
  unsigned int s1426c3f4:1;
  unsigned int s1426c3f5:1;
  unsigned int s1426c3f6:1;
  unsigned int s1426c3f7:1;
  ::S273C21 s1426c3f8;
  ::S273C17 s1426c3f9;
  unsigned int s1426c3f10:1;
  int s1426c3f11[2];
  void *s1426c3f12;
  int s1426c3f13[3];
  virtual  ~S1426C3(); // _ZN7S1426C3D1Ev
  virtual void  v68(); // _ZN7S1426C33v68Ev
  virtual void  v69(); // _ZN7S1426C33v69Ev
  virtual void  v70(); // _ZN7S1426C33v70Ev
  virtual void  v71(); // _ZN7S1426C33v71Ev
  virtual void  v72(); // _ZN7S1426C33v72Ev
  virtual void  v73(); // _ZN7S1426C33v73Ev
  virtual void  v74(); // _ZN7S1426C33v74Ev
  virtual void  v75(); // _ZN7S1426C33v75Ev
  virtual void  v76(); // _ZN7S1426C33v76Ev
  virtual void  v77(); // _ZN7S1426C33v77Ev
  virtual void  v78(); // _ZN7S1426C33v78Ev
  virtual void  v79(); // _ZN7S1426C33v79Ev
  virtual void  v80(); // _ZN7S1426C33v80Ev
  S1426C3(); // tgen
};
//SIG(-1 S1426C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1426C3 ::~S1426C3(){ note_dtor("S1426C3", this);}
void  S1426C3 ::v68(){vfunc_called(this, "_ZN7S1426C33v68Ev");}
void  S1426C3 ::v69(){vfunc_called(this, "_ZN7S1426C33v69Ev");}
void  S1426C3 ::v70(){vfunc_called(this, "_ZN7S1426C33v70Ev");}
void  S1426C3 ::v71(){vfunc_called(this, "_ZN7S1426C33v71Ev");}
void  S1426C3 ::v72(){vfunc_called(this, "_ZN7S1426C33v72Ev");}
void  S1426C3 ::v73(){vfunc_called(this, "_ZN7S1426C33v73Ev");}
void  S1426C3 ::v74(){vfunc_called(this, "_ZN7S1426C33v74Ev");}
void  S1426C3 ::v75(){vfunc_called(this, "_ZN7S1426C33v75Ev");}
void  S1426C3 ::v76(){vfunc_called(this, "_ZN7S1426C33v76Ev");}
void  S1426C3 ::v77(){vfunc_called(this, "_ZN7S1426C33v77Ev");}
void  S1426C3 ::v78(){vfunc_called(this, "_ZN7S1426C33v78Ev");}
void  S1426C3 ::v79(){vfunc_called(this, "_ZN7S1426C33v79Ev");}
void  S1426C3 ::v80(){vfunc_called(this, "_ZN7S1426C33v80Ev");}
S1426C3 ::S1426C3(){ note_ctor("S1426C3", this);} // tgen

static void Test_S1426C3()
{
  extern Class_Descriptor cd_S1426C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1426C3, buf);
    S1426C3 *dp, &lv = *(dp=new (buf) S1426C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1426C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1426C3)");
    check_base_class_offset(lv, (S1426C4*), 0, "S1426C3");
    check_field_offset(lv, s1426c3f0, ABISELECT(96,60), "S1426C3.s1426c3f0");
    check_field_offset(lv, s1426c3f1, ABISELECT(104,64), "S1426C3.s1426c3f1");
    check_field_offset(lv, s1426c3f2, ABISELECT(112,72), "S1426C3.s1426c3f2");
    set_bf_and_test(lv, s1426c3f3, ABISELECT(132,92), 0, 1, 1, "S1426C3");
    set_bf_and_test(lv, s1426c3f4, ABISELECT(132,92), 1, 1, 1, "S1426C3");
    set_bf_and_test(lv, s1426c3f5, ABISELECT(132,92), 2, 1, 1, "S1426C3");
    set_bf_and_test(lv, s1426c3f6, ABISELECT(132,92), 3, 1, 1, "S1426C3");
    set_bf_and_test(lv, s1426c3f7, ABISELECT(132,92), 4, 1, 1, "S1426C3");
    check_field_offset(lv, s1426c3f8, ABISELECT(136,96), "S1426C3.s1426c3f8");
    check_field_offset(lv, s1426c3f9, ABISELECT(152,108), "S1426C3.s1426c3f9");
    set_bf_and_test(lv, s1426c3f10, ABISELECT(168,120), 0, 1, 1, "S1426C3");
    check_field_offset(lv, s1426c3f11, ABISELECT(172,124), "S1426C3.s1426c3f11");
    check_field_offset(lv, s1426c3f12, ABISELECT(184,132), "S1426C3.s1426c3f12");
    check_field_offset(lv, s1426c3f13, ABISELECT(192,136), "S1426C3.s1426c3f13");
    test_class_info(&lv, &cd_S1426C3);
    dp->~S1426C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1426C3(Test_S1426C3, "S1426C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1426C3C1Ev();
extern void _ZN7S1426C3D1Ev();
Name_Map name_map_S1426C3[] = {
  NSPAIR(_ZN7S1426C3C1Ev),
  NSPAIR(_ZN7S1426C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1426C4;
extern VTBL_ENTRY _ZTI7S1426C4[];
extern  VTBL_ENTRY _ZTV7S1426C4[];
static Base_Class bases_S1426C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1426C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1426C3[];
extern void _ZN7S1426C3D1Ev();
extern void _ZN7S1426C3D0Ev();
extern void _ZN7S1426C42v4Ev();
extern void _ZN7S1426C42v5Ev();
extern void _ZN7S1426C42v6Ev();
extern void _ZN7S1426C42v7Ev();
extern void _ZN7S1426C42v8Ev();
extern void _ZN7S1426C42v9Ev();
extern void _ZN7S1426C43v10Ev();
extern void _ZN7S1426C43v11Ev();
extern void _ZN7S1426C43v12Ev();
extern void _ZN7S1426C43v13Ev();
extern void _ZN7S1426C43v14Ev();
extern void _ZN7S1426C43v15Ev();
extern void _ZN7S1426C43v16Ev();
extern void _ZN7S1426C43v17Ev();
extern void _ZN7S1426C43v18Ev();
extern void _ZN7S1426C43v19Ev();
extern void _ZN7S1426C43v20Ev();
extern void _ZN7S1426C43v21Ev();
extern void _ZN7S1426C43v22Ev();
extern void _ZN7S1426C43v23Ev();
extern void _ZN7S1426C43v24Ev();
extern void _ZN7S1426C43v25Ev();
extern void _ZN7S1426C43v26Ev();
extern void _ZN7S1426C43v27Ev();
extern void _ZN7S1426C43v28Ev();
extern void _ZN7S1426C43v29Ev();
extern void _ZN7S1426C43v30Ev();
extern void _ZN7S1426C43v31Ev();
extern void _ZN7S1426C43v32Ev();
extern void _ZN7S1426C43v33Ev();
extern void _ZN7S1426C43v34Ev();
extern void _ZN7S1426C43v35Ev();
extern void _ZN7S1426C43v36Ev();
extern void _ZN7S1426C43v37Ev();
extern void _ZN7S1426C43v38Ev();
extern void _ZN7S1426C43v39Ev();
extern void _ZN7S1426C43v40Ev();
extern void _ZN7S1426C43v41Ev();
extern void _ZN7S1426C43v42Ev();
extern void _ZN7S1426C43v43Ev();
extern void _ZN7S1426C43v44Ev();
extern void _ZN7S1426C43v45Ev();
extern void _ZN7S1426C43v46Ev();
extern void _ZN7S1426C43v47Ev();
extern void _ZN7S1426C43v48Ev();
extern void _ZN7S1426C43v49Ev();
extern void _ZN7S1426C43v50Ev();
extern void _ZN7S1426C43v51Ev();
extern void _ZN7S1426C43v52Ev();
extern void _ZN7S1426C43v53Ev();
extern void _ZN7S1426C43v54Ev();
extern void _ZN7S1426C43v55Ev();
extern void _ZN7S1426C43v56Ev();
extern void _ZN7S1426C43v57Ev();
extern void _ZN7S1426C43v58Ev();
extern void _ZN7S1426C43v59Ev();
extern void _ZN7S1426C43v60Ev();
extern void _ZN7S1426C43v61Ev();
extern void _ZN7S1426C43v62Ev();
extern void _ZN7S1426C43v63Ev();
extern void _ZN7S1426C43v64Ev();
extern void _ZN7S1426C43v65Ev();
extern void _ZN7S1426C43v66Ev();
extern void _ZN7S1426C43v67Ev();
extern void _ZN7S1426C33v68Ev();
extern void _ZN7S1426C33v69Ev();
extern void _ZN7S1426C33v70Ev();
extern void _ZN7S1426C33v71Ev();
extern void _ZN7S1426C33v72Ev();
extern void _ZN7S1426C33v73Ev();
extern void _ZN7S1426C33v74Ev();
extern void _ZN7S1426C33v75Ev();
extern void _ZN7S1426C33v76Ev();
extern void _ZN7S1426C33v77Ev();
extern void _ZN7S1426C33v78Ev();
extern void _ZN7S1426C33v79Ev();
extern void _ZN7S1426C33v80Ev();
static  VTBL_ENTRY vtc_S1426C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1426C3[0]),
  (VTBL_ENTRY)&_ZN7S1426C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1426C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S1426C3[];
extern  VTBL_ENTRY _ZTV7S1426C3[];
Class_Descriptor cd_S1426C3 = {  "S1426C3", // class name
  bases_S1426C3, 1,
  &(vtc_S1426C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1426C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1426C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1426C2  : S1426C3 {
  unsigned int s1426c2f0:1;
  unsigned int s1426c2f1:1;
  unsigned int s1426c2f2:1;
  unsigned int s1426c2f3:1;
  ::S664C12_nt s1426c2f4;
  char s1426c2f5[2];
  ::S3432C14_nt s1426c2f6;
  ::S632C13 s1426c2f7;
  ::S3432C14_nt s1426c2f8;
  virtual  ~S1426C2(); // _ZN7S1426C2D1Ev
  virtual void  v81(); // _ZN7S1426C23v81Ev
  virtual void  v82(); // _ZN7S1426C23v82Ev
  virtual void  v83(); // _ZN7S1426C23v83Ev
  virtual void  v84(); // _ZN7S1426C23v84Ev
  virtual void  v85(); // _ZN7S1426C23v85Ev
  virtual void  v86(); // _ZN7S1426C23v86Ev
  virtual void  v87(); // _ZN7S1426C23v87Ev
  S1426C2(); // tgen
};
//SIG(-1 S1426C2) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S1426C2 ::~S1426C2(){ note_dtor("S1426C2", this);}
void  S1426C2 ::v81(){vfunc_called(this, "_ZN7S1426C23v81Ev");}
void  S1426C2 ::v82(){vfunc_called(this, "_ZN7S1426C23v82Ev");}
void  S1426C2 ::v83(){vfunc_called(this, "_ZN7S1426C23v83Ev");}
void  S1426C2 ::v84(){vfunc_called(this, "_ZN7S1426C23v84Ev");}
void  S1426C2 ::v85(){vfunc_called(this, "_ZN7S1426C23v85Ev");}
void  S1426C2 ::v86(){vfunc_called(this, "_ZN7S1426C23v86Ev");}
void  S1426C2 ::v87(){vfunc_called(this, "_ZN7S1426C23v87Ev");}
S1426C2 ::S1426C2(){ note_ctor("S1426C2", this);} // tgen

static void Test_S1426C2()
{
  extern Class_Descriptor cd_S1426C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1426C2, buf);
    S1426C2 *dp, &lv = *(dp=new (buf) S1426C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1426C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1426C2)");
    check_base_class_offset(lv, (S1426C4*)(S1426C3*), 0, "S1426C2");
    check_base_class_offset(lv, (S1426C3*), 0, "S1426C2");
    set_bf_and_test(lv, s1426c2f0, ABISELECT(204,148), 0, 1, 1, "S1426C2");
    set_bf_and_test(lv, s1426c2f1, ABISELECT(204,148), 1, 1, 1, "S1426C2");
    set_bf_and_test(lv, s1426c2f2, ABISELECT(204,148), 2, 1, 1, "S1426C2");
    set_bf_and_test(lv, s1426c2f3, ABISELECT(204,148), 3, 1, 1, "S1426C2");
    check_field_offset(lv, s1426c2f4, ABISELECT(208,152), "S1426C2.s1426c2f4");
    check_field_offset(lv, s1426c2f5, ABISELECT(220,164), "S1426C2.s1426c2f5");
    check_field_offset(lv, s1426c2f6, ABISELECT(224,168), "S1426C2.s1426c2f6");
    check_field_offset(lv, s1426c2f7, ABISELECT(232,176), "S1426C2.s1426c2f7");
    check_field_offset(lv, s1426c2f8, ABISELECT(244,188), "S1426C2.s1426c2f8");
    test_class_info(&lv, &cd_S1426C2);
    dp->~S1426C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1426C2(Test_S1426C2, "S1426C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1426C2C1Ev();
extern void _ZN7S1426C2D1Ev();
Name_Map name_map_S1426C2[] = {
  NSPAIR(_ZN7S1426C2C1Ev),
  NSPAIR(_ZN7S1426C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1426C4;
extern VTBL_ENTRY _ZTI7S1426C4[];
extern  VTBL_ENTRY _ZTV7S1426C4[];
extern Class_Descriptor cd_S1426C3;
extern VTBL_ENTRY _ZTI7S1426C3[];
extern  VTBL_ENTRY _ZTV7S1426C3[];
static Base_Class bases_S1426C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1426C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1426C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1426C2[];
extern void _ZN7S1426C2D1Ev();
extern void _ZN7S1426C2D0Ev();
extern void _ZN7S1426C42v4Ev();
extern void _ZN7S1426C42v5Ev();
extern void _ZN7S1426C42v6Ev();
extern void _ZN7S1426C42v7Ev();
extern void _ZN7S1426C42v8Ev();
extern void _ZN7S1426C42v9Ev();
extern void _ZN7S1426C43v10Ev();
extern void _ZN7S1426C43v11Ev();
extern void _ZN7S1426C43v12Ev();
extern void _ZN7S1426C43v13Ev();
extern void _ZN7S1426C43v14Ev();
extern void _ZN7S1426C43v15Ev();
extern void _ZN7S1426C43v16Ev();
extern void _ZN7S1426C43v17Ev();
extern void _ZN7S1426C43v18Ev();
extern void _ZN7S1426C43v19Ev();
extern void _ZN7S1426C43v20Ev();
extern void _ZN7S1426C43v21Ev();
extern void _ZN7S1426C43v22Ev();
extern void _ZN7S1426C43v23Ev();
extern void _ZN7S1426C43v24Ev();
extern void _ZN7S1426C43v25Ev();
extern void _ZN7S1426C43v26Ev();
extern void _ZN7S1426C43v27Ev();
extern void _ZN7S1426C43v28Ev();
extern void _ZN7S1426C43v29Ev();
extern void _ZN7S1426C43v30Ev();
extern void _ZN7S1426C43v31Ev();
extern void _ZN7S1426C43v32Ev();
extern void _ZN7S1426C43v33Ev();
extern void _ZN7S1426C43v34Ev();
extern void _ZN7S1426C43v35Ev();
extern void _ZN7S1426C43v36Ev();
extern void _ZN7S1426C43v37Ev();
extern void _ZN7S1426C43v38Ev();
extern void _ZN7S1426C43v39Ev();
extern void _ZN7S1426C43v40Ev();
extern void _ZN7S1426C43v41Ev();
extern void _ZN7S1426C43v42Ev();
extern void _ZN7S1426C43v43Ev();
extern void _ZN7S1426C43v44Ev();
extern void _ZN7S1426C43v45Ev();
extern void _ZN7S1426C43v46Ev();
extern void _ZN7S1426C43v47Ev();
extern void _ZN7S1426C43v48Ev();
extern void _ZN7S1426C43v49Ev();
extern void _ZN7S1426C43v50Ev();
extern void _ZN7S1426C43v51Ev();
extern void _ZN7S1426C43v52Ev();
extern void _ZN7S1426C43v53Ev();
extern void _ZN7S1426C43v54Ev();
extern void _ZN7S1426C43v55Ev();
extern void _ZN7S1426C43v56Ev();
extern void _ZN7S1426C43v57Ev();
extern void _ZN7S1426C43v58Ev();
extern void _ZN7S1426C43v59Ev();
extern void _ZN7S1426C43v60Ev();
extern void _ZN7S1426C43v61Ev();
extern void _ZN7S1426C43v62Ev();
extern void _ZN7S1426C43v63Ev();
extern void _ZN7S1426C43v64Ev();
extern void _ZN7S1426C43v65Ev();
extern void _ZN7S1426C43v66Ev();
extern void _ZN7S1426C43v67Ev();
extern void _ZN7S1426C33v68Ev();
extern void _ZN7S1426C33v69Ev();
extern void _ZN7S1426C33v70Ev();
extern void _ZN7S1426C33v71Ev();
extern void _ZN7S1426C33v72Ev();
extern void _ZN7S1426C33v73Ev();
extern void _ZN7S1426C33v74Ev();
extern void _ZN7S1426C33v75Ev();
extern void _ZN7S1426C33v76Ev();
extern void _ZN7S1426C33v77Ev();
extern void _ZN7S1426C33v78Ev();
extern void _ZN7S1426C33v79Ev();
extern void _ZN7S1426C33v80Ev();
extern void _ZN7S1426C23v81Ev();
extern void _ZN7S1426C23v82Ev();
extern void _ZN7S1426C23v83Ev();
extern void _ZN7S1426C23v84Ev();
extern void _ZN7S1426C23v85Ev();
extern void _ZN7S1426C23v86Ev();
extern void _ZN7S1426C23v87Ev();
static  VTBL_ENTRY vtc_S1426C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1426C2[0]),
  (VTBL_ENTRY)&_ZN7S1426C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1426C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1426C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1426C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1426C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1426C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1426C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1426C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1426C23v87Ev,
};
extern VTBL_ENTRY _ZTI7S1426C2[];
extern  VTBL_ENTRY _ZTV7S1426C2[];
Class_Descriptor cd_S1426C2 = {  "S1426C2", // class name
  bases_S1426C2, 2,
  &(vtc_S1426C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1426C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1426C2),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1426C1  : S1426C2 {
  int s1426c1f0[2];
  ::S3432C14_nt s1426c1f1;
  unsigned int s1426c1f2:1;
  int s1426c1f3[4];
  virtual  ~S1426C1(); // _ZN7S1426C1D1Ev
  virtual void  v1(); // _ZN7S1426C12v1Ev
  virtual void  v2(); // _ZN7S1426C12v2Ev
  virtual void  v3(); // _ZN7S1426C12v3Ev
  S1426C1(); // tgen
};
//SIG(1 S1426C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 Fi[2] FC5 Fi:1 Fi[4]}


 S1426C1 ::~S1426C1(){ note_dtor("S1426C1", this);}
void  S1426C1 ::v1(){vfunc_called(this, "_ZN7S1426C12v1Ev");}
void  S1426C1 ::v2(){vfunc_called(this, "_ZN7S1426C12v2Ev");}
void  S1426C1 ::v3(){vfunc_called(this, "_ZN7S1426C12v3Ev");}
S1426C1 ::S1426C1(){ note_ctor("S1426C1", this);} // tgen

static void Test_S1426C1()
{
  extern Class_Descriptor cd_S1426C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,59)];
    init_test(&cd_S1426C1, buf);
    S1426C1 *dp, &lv = *(dp=new (buf) S1426C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,232), "sizeof(S1426C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1426C1)");
    check_base_class_offset(lv, (S1426C4*)(S1426C3*)(S1426C2*), 0, "S1426C1");
    check_base_class_offset(lv, (S1426C3*)(S1426C2*), 0, "S1426C1");
    check_base_class_offset(lv, (S1426C2*), 0, "S1426C1");
    check_field_offset(lv, s1426c1f0, ABISELECT(252,196), "S1426C1.s1426c1f0");
    check_field_offset(lv, s1426c1f1, ABISELECT(260,204), "S1426C1.s1426c1f1");
    set_bf_and_test(lv, s1426c1f2, ABISELECT(268,212), 0, 1, 1, "S1426C1");
    check_field_offset(lv, s1426c1f3, ABISELECT(272,216), "S1426C1.s1426c1f3");
    test_class_info(&lv, &cd_S1426C1);
    dp->~S1426C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1426C1(Test_S1426C1, "S1426C1", ABISELECT(288,232));

#else // __cplusplus

extern void _ZN7S1426C1C1Ev();
extern void _ZN7S1426C1D1Ev();
Name_Map name_map_S1426C1[] = {
  NSPAIR(_ZN7S1426C1C1Ev),
  NSPAIR(_ZN7S1426C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1426C4;
extern VTBL_ENTRY _ZTI7S1426C4[];
extern  VTBL_ENTRY _ZTV7S1426C4[];
extern Class_Descriptor cd_S1426C3;
extern VTBL_ENTRY _ZTI7S1426C3[];
extern  VTBL_ENTRY _ZTV7S1426C3[];
extern Class_Descriptor cd_S1426C2;
extern VTBL_ENTRY _ZTI7S1426C2[];
extern  VTBL_ENTRY _ZTV7S1426C2[];
static Base_Class bases_S1426C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1426C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1426C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1426C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1426C1[];
extern void _ZN7S1426C1D1Ev();
extern void _ZN7S1426C1D0Ev();
extern void _ZN7S1426C42v4Ev();
extern void _ZN7S1426C42v5Ev();
extern void _ZN7S1426C42v6Ev();
extern void _ZN7S1426C42v7Ev();
extern void _ZN7S1426C42v8Ev();
extern void _ZN7S1426C42v9Ev();
extern void _ZN7S1426C43v10Ev();
extern void _ZN7S1426C43v11Ev();
extern void _ZN7S1426C43v12Ev();
extern void _ZN7S1426C43v13Ev();
extern void _ZN7S1426C43v14Ev();
extern void _ZN7S1426C43v15Ev();
extern void _ZN7S1426C43v16Ev();
extern void _ZN7S1426C43v17Ev();
extern void _ZN7S1426C43v18Ev();
extern void _ZN7S1426C43v19Ev();
extern void _ZN7S1426C43v20Ev();
extern void _ZN7S1426C43v21Ev();
extern void _ZN7S1426C43v22Ev();
extern void _ZN7S1426C43v23Ev();
extern void _ZN7S1426C43v24Ev();
extern void _ZN7S1426C43v25Ev();
extern void _ZN7S1426C43v26Ev();
extern void _ZN7S1426C43v27Ev();
extern void _ZN7S1426C43v28Ev();
extern void _ZN7S1426C43v29Ev();
extern void _ZN7S1426C43v30Ev();
extern void _ZN7S1426C43v31Ev();
extern void _ZN7S1426C43v32Ev();
extern void _ZN7S1426C43v33Ev();
extern void _ZN7S1426C43v34Ev();
extern void _ZN7S1426C43v35Ev();
extern void _ZN7S1426C43v36Ev();
extern void _ZN7S1426C43v37Ev();
extern void _ZN7S1426C43v38Ev();
extern void _ZN7S1426C43v39Ev();
extern void _ZN7S1426C43v40Ev();
extern void _ZN7S1426C43v41Ev();
extern void _ZN7S1426C43v42Ev();
extern void _ZN7S1426C43v43Ev();
extern void _ZN7S1426C43v44Ev();
extern void _ZN7S1426C43v45Ev();
extern void _ZN7S1426C43v46Ev();
extern void _ZN7S1426C43v47Ev();
extern void _ZN7S1426C43v48Ev();
extern void _ZN7S1426C43v49Ev();
extern void _ZN7S1426C43v50Ev();
extern void _ZN7S1426C43v51Ev();
extern void _ZN7S1426C43v52Ev();
extern void _ZN7S1426C43v53Ev();
extern void _ZN7S1426C43v54Ev();
extern void _ZN7S1426C43v55Ev();
extern void _ZN7S1426C43v56Ev();
extern void _ZN7S1426C43v57Ev();
extern void _ZN7S1426C43v58Ev();
extern void _ZN7S1426C43v59Ev();
extern void _ZN7S1426C43v60Ev();
extern void _ZN7S1426C43v61Ev();
extern void _ZN7S1426C43v62Ev();
extern void _ZN7S1426C43v63Ev();
extern void _ZN7S1426C43v64Ev();
extern void _ZN7S1426C43v65Ev();
extern void _ZN7S1426C43v66Ev();
extern void _ZN7S1426C43v67Ev();
extern void _ZN7S1426C33v68Ev();
extern void _ZN7S1426C33v69Ev();
extern void _ZN7S1426C33v70Ev();
extern void _ZN7S1426C33v71Ev();
extern void _ZN7S1426C33v72Ev();
extern void _ZN7S1426C33v73Ev();
extern void _ZN7S1426C33v74Ev();
extern void _ZN7S1426C33v75Ev();
extern void _ZN7S1426C33v76Ev();
extern void _ZN7S1426C33v77Ev();
extern void _ZN7S1426C33v78Ev();
extern void _ZN7S1426C33v79Ev();
extern void _ZN7S1426C33v80Ev();
extern void _ZN7S1426C23v81Ev();
extern void _ZN7S1426C23v82Ev();
extern void _ZN7S1426C23v83Ev();
extern void _ZN7S1426C23v84Ev();
extern void _ZN7S1426C23v85Ev();
extern void _ZN7S1426C23v86Ev();
extern void _ZN7S1426C23v87Ev();
extern void _ZN7S1426C12v1Ev();
extern void _ZN7S1426C12v2Ev();
extern void _ZN7S1426C12v3Ev();
static  VTBL_ENTRY vtc_S1426C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1426C1[0]),
  (VTBL_ENTRY)&_ZN7S1426C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1426C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1426C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1426C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1426C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1426C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1426C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1426C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1426C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1426C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1426C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1426C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1426C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1426C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1426C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1426C1[];
extern  VTBL_ENTRY _ZTV7S1426C1[];
Class_Descriptor cd_S1426C1 = {  "S1426C1", // class name
  bases_S1426C1, 3,
  &(vtc_S1426C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,232), // object size
  NSPAIRA(_ZTI7S1426C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1426C1),91, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1427C4  {
  int s1427c4f0;
  __tsi64 s1427c4f1;
  void *s1427c4f2[4];
  int s1427c4f3[2];
  void *s1427c4f4;
  ::S3432C14_nt s1427c4f5;
  void *s1427c4f6[2];
  virtual  ~S1427C4(); // _ZN7S1427C4D1Ev
  virtual void  v4(); // _ZN7S1427C42v4Ev
  virtual void  v5(); // _ZN7S1427C42v5Ev
  virtual void  v6(); // _ZN7S1427C42v6Ev
  virtual void  v7(); // _ZN7S1427C42v7Ev
  virtual void  v8(); // _ZN7S1427C42v8Ev
  virtual void  v9(); // _ZN7S1427C42v9Ev
  virtual void  v10(); // _ZN7S1427C43v10Ev
  virtual void  v11(); // _ZN7S1427C43v11Ev
  virtual void  v12(); // _ZN7S1427C43v12Ev
  virtual void  v13(); // _ZN7S1427C43v13Ev
  virtual void  v14(); // _ZN7S1427C43v14Ev
  virtual void  v15(); // _ZN7S1427C43v15Ev
  virtual void  v16(); // _ZN7S1427C43v16Ev
  virtual void  v17(); // _ZN7S1427C43v17Ev
  virtual void  v18(); // _ZN7S1427C43v18Ev
  virtual void  v19(); // _ZN7S1427C43v19Ev
  virtual void  v20(); // _ZN7S1427C43v20Ev
  virtual void  v21(); // _ZN7S1427C43v21Ev
  virtual void  v22(); // _ZN7S1427C43v22Ev
  virtual void  v23(); // _ZN7S1427C43v23Ev
  virtual void  v24(); // _ZN7S1427C43v24Ev
  virtual void  v25(); // _ZN7S1427C43v25Ev
  virtual void  v26(); // _ZN7S1427C43v26Ev
  virtual void  v27(); // _ZN7S1427C43v27Ev
  virtual void  v28(); // _ZN7S1427C43v28Ev
  virtual void  v29(); // _ZN7S1427C43v29Ev
  virtual void  v30(); // _ZN7S1427C43v30Ev
  virtual void  v31(); // _ZN7S1427C43v31Ev
  virtual void  v32(); // _ZN7S1427C43v32Ev
  virtual void  v33(); // _ZN7S1427C43v33Ev
  virtual void  v34(); // _ZN7S1427C43v34Ev
  virtual void  v35(); // _ZN7S1427C43v35Ev
  virtual void  v36(); // _ZN7S1427C43v36Ev
  virtual void  v37(); // _ZN7S1427C43v37Ev
  virtual void  v38(); // _ZN7S1427C43v38Ev
  virtual void  v39(); // _ZN7S1427C43v39Ev
  virtual void  v40(); // _ZN7S1427C43v40Ev
  virtual void  v41(); // _ZN7S1427C43v41Ev
  virtual void  v42(); // _ZN7S1427C43v42Ev
  virtual void  v43(); // _ZN7S1427C43v43Ev
  virtual void  v44(); // _ZN7S1427C43v44Ev
  virtual void  v45(); // _ZN7S1427C43v45Ev
  virtual void  v46(); // _ZN7S1427C43v46Ev
  virtual void  v47(); // _ZN7S1427C43v47Ev
  virtual void  v48(); // _ZN7S1427C43v48Ev
  virtual void  v49(); // _ZN7S1427C43v49Ev
  virtual void  v50(); // _ZN7S1427C43v50Ev
  virtual void  v51(); // _ZN7S1427C43v51Ev
  virtual void  v52(); // _ZN7S1427C43v52Ev
  virtual void  v53(); // _ZN7S1427C43v53Ev
  virtual void  v54(); // _ZN7S1427C43v54Ev
  virtual void  v55(); // _ZN7S1427C43v55Ev
  virtual void  v56(); // _ZN7S1427C43v56Ev
  virtual void  v57(); // _ZN7S1427C43v57Ev
  virtual void  v58(); // _ZN7S1427C43v58Ev
  virtual void  v59(); // _ZN7S1427C43v59Ev
  virtual void  v60(); // _ZN7S1427C43v60Ev
  virtual void  v61(); // _ZN7S1427C43v61Ev
  virtual void  v62(); // _ZN7S1427C43v62Ev
  virtual void  v63(); // _ZN7S1427C43v63Ev
  virtual void  v64(); // _ZN7S1427C43v64Ev
  virtual void  v65(); // _ZN7S1427C43v65Ev
  virtual void  v66(); // _ZN7S1427C43v66Ev
  virtual void  v67(); // _ZN7S1427C43v67Ev
  S1427C4(); // tgen
};
//SIG(-1 S1427C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1427C4 ::~S1427C4(){ note_dtor("S1427C4", this);}
void  S1427C4 ::v4(){vfunc_called(this, "_ZN7S1427C42v4Ev");}
void  S1427C4 ::v5(){vfunc_called(this, "_ZN7S1427C42v5Ev");}
void  S1427C4 ::v6(){vfunc_called(this, "_ZN7S1427C42v6Ev");}
void  S1427C4 ::v7(){vfunc_called(this, "_ZN7S1427C42v7Ev");}
void  S1427C4 ::v8(){vfunc_called(this, "_ZN7S1427C42v8Ev");}
void  S1427C4 ::v9(){vfunc_called(this, "_ZN7S1427C42v9Ev");}
void  S1427C4 ::v10(){vfunc_called(this, "_ZN7S1427C43v10Ev");}
void  S1427C4 ::v11(){vfunc_called(this, "_ZN7S1427C43v11Ev");}
void  S1427C4 ::v12(){vfunc_called(this, "_ZN7S1427C43v12Ev");}
void  S1427C4 ::v13(){vfunc_called(this, "_ZN7S1427C43v13Ev");}
void  S1427C4 ::v14(){vfunc_called(this, "_ZN7S1427C43v14Ev");}
void  S1427C4 ::v15(){vfunc_called(this, "_ZN7S1427C43v15Ev");}
void  S1427C4 ::v16(){vfunc_called(this, "_ZN7S1427C43v16Ev");}
void  S1427C4 ::v17(){vfunc_called(this, "_ZN7S1427C43v17Ev");}
void  S1427C4 ::v18(){vfunc_called(this, "_ZN7S1427C43v18Ev");}
void  S1427C4 ::v19(){vfunc_called(this, "_ZN7S1427C43v19Ev");}
void  S1427C4 ::v20(){vfunc_called(this, "_ZN7S1427C43v20Ev");}
void  S1427C4 ::v21(){vfunc_called(this, "_ZN7S1427C43v21Ev");}
void  S1427C4 ::v22(){vfunc_called(this, "_ZN7S1427C43v22Ev");}
void  S1427C4 ::v23(){vfunc_called(this, "_ZN7S1427C43v23Ev");}
void  S1427C4 ::v24(){vfunc_called(this, "_ZN7S1427C43v24Ev");}
void  S1427C4 ::v25(){vfunc_called(this, "_ZN7S1427C43v25Ev");}
void  S1427C4 ::v26(){vfunc_called(this, "_ZN7S1427C43v26Ev");}
void  S1427C4 ::v27(){vfunc_called(this, "_ZN7S1427C43v27Ev");}
void  S1427C4 ::v28(){vfunc_called(this, "_ZN7S1427C43v28Ev");}
void  S1427C4 ::v29(){vfunc_called(this, "_ZN7S1427C43v29Ev");}
void  S1427C4 ::v30(){vfunc_called(this, "_ZN7S1427C43v30Ev");}
void  S1427C4 ::v31(){vfunc_called(this, "_ZN7S1427C43v31Ev");}
void  S1427C4 ::v32(){vfunc_called(this, "_ZN7S1427C43v32Ev");}
void  S1427C4 ::v33(){vfunc_called(this, "_ZN7S1427C43v33Ev");}
void  S1427C4 ::v34(){vfunc_called(this, "_ZN7S1427C43v34Ev");}
void  S1427C4 ::v35(){vfunc_called(this, "_ZN7S1427C43v35Ev");}
void  S1427C4 ::v36(){vfunc_called(this, "_ZN7S1427C43v36Ev");}
void  S1427C4 ::v37(){vfunc_called(this, "_ZN7S1427C43v37Ev");}
void  S1427C4 ::v38(){vfunc_called(this, "_ZN7S1427C43v38Ev");}
void  S1427C4 ::v39(){vfunc_called(this, "_ZN7S1427C43v39Ev");}
void  S1427C4 ::v40(){vfunc_called(this, "_ZN7S1427C43v40Ev");}
void  S1427C4 ::v41(){vfunc_called(this, "_ZN7S1427C43v41Ev");}
void  S1427C4 ::v42(){vfunc_called(this, "_ZN7S1427C43v42Ev");}
void  S1427C4 ::v43(){vfunc_called(this, "_ZN7S1427C43v43Ev");}
void  S1427C4 ::v44(){vfunc_called(this, "_ZN7S1427C43v44Ev");}
void  S1427C4 ::v45(){vfunc_called(this, "_ZN7S1427C43v45Ev");}
void  S1427C4 ::v46(){vfunc_called(this, "_ZN7S1427C43v46Ev");}
void  S1427C4 ::v47(){vfunc_called(this, "_ZN7S1427C43v47Ev");}
void  S1427C4 ::v48(){vfunc_called(this, "_ZN7S1427C43v48Ev");}
void  S1427C4 ::v49(){vfunc_called(this, "_ZN7S1427C43v49Ev");}
void  S1427C4 ::v50(){vfunc_called(this, "_ZN7S1427C43v50Ev");}
void  S1427C4 ::v51(){vfunc_called(this, "_ZN7S1427C43v51Ev");}
void  S1427C4 ::v52(){vfunc_called(this, "_ZN7S1427C43v52Ev");}
void  S1427C4 ::v53(){vfunc_called(this, "_ZN7S1427C43v53Ev");}
void  S1427C4 ::v54(){vfunc_called(this, "_ZN7S1427C43v54Ev");}
void  S1427C4 ::v55(){vfunc_called(this, "_ZN7S1427C43v55Ev");}
void  S1427C4 ::v56(){vfunc_called(this, "_ZN7S1427C43v56Ev");}
void  S1427C4 ::v57(){vfunc_called(this, "_ZN7S1427C43v57Ev");}
void  S1427C4 ::v58(){vfunc_called(this, "_ZN7S1427C43v58Ev");}
void  S1427C4 ::v59(){vfunc_called(this, "_ZN7S1427C43v59Ev");}
void  S1427C4 ::v60(){vfunc_called(this, "_ZN7S1427C43v60Ev");}
void  S1427C4 ::v61(){vfunc_called(this, "_ZN7S1427C43v61Ev");}
void  S1427C4 ::v62(){vfunc_called(this, "_ZN7S1427C43v62Ev");}
void  S1427C4 ::v63(){vfunc_called(this, "_ZN7S1427C43v63Ev");}
void  S1427C4 ::v64(){vfunc_called(this, "_ZN7S1427C43v64Ev");}
void  S1427C4 ::v65(){vfunc_called(this, "_ZN7S1427C43v65Ev");}
void  S1427C4 ::v66(){vfunc_called(this, "_ZN7S1427C43v66Ev");}
void  S1427C4 ::v67(){vfunc_called(this, "_ZN7S1427C43v67Ev");}
S1427C4 ::S1427C4(){ note_ctor("S1427C4", this);} // tgen

static void Test_S1427C4()
{
  extern Class_Descriptor cd_S1427C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1427C4, buf);
    S1427C4 *dp, &lv = *(dp=new (buf) S1427C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1427C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1427C4)");
    check_field_offset(lv, s1427c4f0, ABISELECT(8,4), "S1427C4.s1427c4f0");
    check_field_offset(lv, s1427c4f1, ABISELECT(16,8), "S1427C4.s1427c4f1");
    check_field_offset(lv, s1427c4f2, ABISELECT(24,16), "S1427C4.s1427c4f2");
    check_field_offset(lv, s1427c4f3, ABISELECT(56,32), "S1427C4.s1427c4f3");
    check_field_offset(lv, s1427c4f4, ABISELECT(64,40), "S1427C4.s1427c4f4");
    check_field_offset(lv, s1427c4f5, ABISELECT(72,44), "S1427C4.s1427c4f5");
    check_field_offset(lv, s1427c4f6, ABISELECT(80,52), "S1427C4.s1427c4f6");
    test_class_info(&lv, &cd_S1427C4);
    dp->~S1427C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1427C4(Test_S1427C4, "S1427C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1427C4C1Ev();
extern void _ZN7S1427C4D1Ev();
Name_Map name_map_S1427C4[] = {
  NSPAIR(_ZN7S1427C4C1Ev),
  NSPAIR(_ZN7S1427C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1427C4[];
extern void _ZN7S1427C4D1Ev();
extern void _ZN7S1427C4D0Ev();
extern void _ZN7S1427C42v4Ev();
extern void _ZN7S1427C42v5Ev();
extern void _ZN7S1427C42v6Ev();
extern void _ZN7S1427C42v7Ev();
extern void _ZN7S1427C42v8Ev();
extern void _ZN7S1427C42v9Ev();
extern void _ZN7S1427C43v10Ev();
extern void _ZN7S1427C43v11Ev();
extern void _ZN7S1427C43v12Ev();
extern void _ZN7S1427C43v13Ev();
extern void _ZN7S1427C43v14Ev();
extern void _ZN7S1427C43v15Ev();
extern void _ZN7S1427C43v16Ev();
extern void _ZN7S1427C43v17Ev();
extern void _ZN7S1427C43v18Ev();
extern void _ZN7S1427C43v19Ev();
extern void _ZN7S1427C43v20Ev();
extern void _ZN7S1427C43v21Ev();
extern void _ZN7S1427C43v22Ev();
extern void _ZN7S1427C43v23Ev();
extern void _ZN7S1427C43v24Ev();
extern void _ZN7S1427C43v25Ev();
extern void _ZN7S1427C43v26Ev();
extern void _ZN7S1427C43v27Ev();
extern void _ZN7S1427C43v28Ev();
extern void _ZN7S1427C43v29Ev();
extern void _ZN7S1427C43v30Ev();
extern void _ZN7S1427C43v31Ev();
extern void _ZN7S1427C43v32Ev();
extern void _ZN7S1427C43v33Ev();
extern void _ZN7S1427C43v34Ev();
extern void _ZN7S1427C43v35Ev();
extern void _ZN7S1427C43v36Ev();
extern void _ZN7S1427C43v37Ev();
extern void _ZN7S1427C43v38Ev();
extern void _ZN7S1427C43v39Ev();
extern void _ZN7S1427C43v40Ev();
extern void _ZN7S1427C43v41Ev();
extern void _ZN7S1427C43v42Ev();
extern void _ZN7S1427C43v43Ev();
extern void _ZN7S1427C43v44Ev();
extern void _ZN7S1427C43v45Ev();
extern void _ZN7S1427C43v46Ev();
extern void _ZN7S1427C43v47Ev();
extern void _ZN7S1427C43v48Ev();
extern void _ZN7S1427C43v49Ev();
extern void _ZN7S1427C43v50Ev();
extern void _ZN7S1427C43v51Ev();
extern void _ZN7S1427C43v52Ev();
extern void _ZN7S1427C43v53Ev();
extern void _ZN7S1427C43v54Ev();
extern void _ZN7S1427C43v55Ev();
extern void _ZN7S1427C43v56Ev();
extern void _ZN7S1427C43v57Ev();
extern void _ZN7S1427C43v58Ev();
extern void _ZN7S1427C43v59Ev();
extern void _ZN7S1427C43v60Ev();
extern void _ZN7S1427C43v61Ev();
extern void _ZN7S1427C43v62Ev();
extern void _ZN7S1427C43v63Ev();
extern void _ZN7S1427C43v64Ev();
extern void _ZN7S1427C43v65Ev();
extern void _ZN7S1427C43v66Ev();
extern void _ZN7S1427C43v67Ev();
static  VTBL_ENTRY vtc_S1427C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1427C4[0]),
  (VTBL_ENTRY)&_ZN7S1427C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1427C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v67Ev,
};
extern VTBL_ENTRY _ZTI7S1427C4[];
extern  VTBL_ENTRY _ZTV7S1427C4[];
Class_Descriptor cd_S1427C4 = {  "S1427C4", // class name
  0,0,//no base classes
  &(vtc_S1427C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1427C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1427C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1427C3  : S1427C4 {
  void *s1427c3f0;
  ::S3432C14_nt s1427c3f1;
  int s1427c3f2[5];
  unsigned int s1427c3f3:1;
  unsigned int s1427c3f4:1;
  unsigned int s1427c3f5:1;
  unsigned int s1427c3f6:1;
  unsigned int s1427c3f7:1;
  ::S273C21 s1427c3f8;
  ::S273C17 s1427c3f9;
  unsigned int s1427c3f10:1;
  int s1427c3f11[2];
  void *s1427c3f12;
  int s1427c3f13[3];
  virtual  ~S1427C3(); // _ZN7S1427C3D1Ev
  virtual void  v68(); // _ZN7S1427C33v68Ev
  virtual void  v69(); // _ZN7S1427C33v69Ev
  virtual void  v70(); // _ZN7S1427C33v70Ev
  virtual void  v71(); // _ZN7S1427C33v71Ev
  virtual void  v72(); // _ZN7S1427C33v72Ev
  virtual void  v73(); // _ZN7S1427C33v73Ev
  virtual void  v74(); // _ZN7S1427C33v74Ev
  virtual void  v75(); // _ZN7S1427C33v75Ev
  virtual void  v76(); // _ZN7S1427C33v76Ev
  virtual void  v77(); // _ZN7S1427C33v77Ev
  virtual void  v78(); // _ZN7S1427C33v78Ev
  virtual void  v79(); // _ZN7S1427C33v79Ev
  virtual void  v80(); // _ZN7S1427C33v80Ev
  S1427C3(); // tgen
};
//SIG(-1 S1427C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1427C3 ::~S1427C3(){ note_dtor("S1427C3", this);}
void  S1427C3 ::v68(){vfunc_called(this, "_ZN7S1427C33v68Ev");}
void  S1427C3 ::v69(){vfunc_called(this, "_ZN7S1427C33v69Ev");}
void  S1427C3 ::v70(){vfunc_called(this, "_ZN7S1427C33v70Ev");}
void  S1427C3 ::v71(){vfunc_called(this, "_ZN7S1427C33v71Ev");}
void  S1427C3 ::v72(){vfunc_called(this, "_ZN7S1427C33v72Ev");}
void  S1427C3 ::v73(){vfunc_called(this, "_ZN7S1427C33v73Ev");}
void  S1427C3 ::v74(){vfunc_called(this, "_ZN7S1427C33v74Ev");}
void  S1427C3 ::v75(){vfunc_called(this, "_ZN7S1427C33v75Ev");}
void  S1427C3 ::v76(){vfunc_called(this, "_ZN7S1427C33v76Ev");}
void  S1427C3 ::v77(){vfunc_called(this, "_ZN7S1427C33v77Ev");}
void  S1427C3 ::v78(){vfunc_called(this, "_ZN7S1427C33v78Ev");}
void  S1427C3 ::v79(){vfunc_called(this, "_ZN7S1427C33v79Ev");}
void  S1427C3 ::v80(){vfunc_called(this, "_ZN7S1427C33v80Ev");}
S1427C3 ::S1427C3(){ note_ctor("S1427C3", this);} // tgen

static void Test_S1427C3()
{
  extern Class_Descriptor cd_S1427C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1427C3, buf);
    S1427C3 *dp, &lv = *(dp=new (buf) S1427C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1427C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1427C3)");
    check_base_class_offset(lv, (S1427C4*), 0, "S1427C3");
    check_field_offset(lv, s1427c3f0, ABISELECT(96,60), "S1427C3.s1427c3f0");
    check_field_offset(lv, s1427c3f1, ABISELECT(104,64), "S1427C3.s1427c3f1");
    check_field_offset(lv, s1427c3f2, ABISELECT(112,72), "S1427C3.s1427c3f2");
    set_bf_and_test(lv, s1427c3f3, ABISELECT(132,92), 0, 1, 1, "S1427C3");
    set_bf_and_test(lv, s1427c3f4, ABISELECT(132,92), 1, 1, 1, "S1427C3");
    set_bf_and_test(lv, s1427c3f5, ABISELECT(132,92), 2, 1, 1, "S1427C3");
    set_bf_and_test(lv, s1427c3f6, ABISELECT(132,92), 3, 1, 1, "S1427C3");
    set_bf_and_test(lv, s1427c3f7, ABISELECT(132,92), 4, 1, 1, "S1427C3");
    check_field_offset(lv, s1427c3f8, ABISELECT(136,96), "S1427C3.s1427c3f8");
    check_field_offset(lv, s1427c3f9, ABISELECT(152,108), "S1427C3.s1427c3f9");
    set_bf_and_test(lv, s1427c3f10, ABISELECT(168,120), 0, 1, 1, "S1427C3");
    check_field_offset(lv, s1427c3f11, ABISELECT(172,124), "S1427C3.s1427c3f11");
    check_field_offset(lv, s1427c3f12, ABISELECT(184,132), "S1427C3.s1427c3f12");
    check_field_offset(lv, s1427c3f13, ABISELECT(192,136), "S1427C3.s1427c3f13");
    test_class_info(&lv, &cd_S1427C3);
    dp->~S1427C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1427C3(Test_S1427C3, "S1427C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1427C3C1Ev();
extern void _ZN7S1427C3D1Ev();
Name_Map name_map_S1427C3[] = {
  NSPAIR(_ZN7S1427C3C1Ev),
  NSPAIR(_ZN7S1427C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1427C4;
extern VTBL_ENTRY _ZTI7S1427C4[];
extern  VTBL_ENTRY _ZTV7S1427C4[];
static Base_Class bases_S1427C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1427C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1427C3[];
extern void _ZN7S1427C3D1Ev();
extern void _ZN7S1427C3D0Ev();
extern void _ZN7S1427C42v4Ev();
extern void _ZN7S1427C42v5Ev();
extern void _ZN7S1427C42v6Ev();
extern void _ZN7S1427C42v7Ev();
extern void _ZN7S1427C42v8Ev();
extern void _ZN7S1427C42v9Ev();
extern void _ZN7S1427C43v10Ev();
extern void _ZN7S1427C43v11Ev();
extern void _ZN7S1427C43v12Ev();
extern void _ZN7S1427C43v13Ev();
extern void _ZN7S1427C43v14Ev();
extern void _ZN7S1427C43v15Ev();
extern void _ZN7S1427C43v16Ev();
extern void _ZN7S1427C43v17Ev();
extern void _ZN7S1427C43v18Ev();
extern void _ZN7S1427C43v19Ev();
extern void _ZN7S1427C43v20Ev();
extern void _ZN7S1427C43v21Ev();
extern void _ZN7S1427C43v22Ev();
extern void _ZN7S1427C43v23Ev();
extern void _ZN7S1427C43v24Ev();
extern void _ZN7S1427C43v25Ev();
extern void _ZN7S1427C43v26Ev();
extern void _ZN7S1427C43v27Ev();
extern void _ZN7S1427C43v28Ev();
extern void _ZN7S1427C43v29Ev();
extern void _ZN7S1427C43v30Ev();
extern void _ZN7S1427C43v31Ev();
extern void _ZN7S1427C43v32Ev();
extern void _ZN7S1427C43v33Ev();
extern void _ZN7S1427C43v34Ev();
extern void _ZN7S1427C43v35Ev();
extern void _ZN7S1427C43v36Ev();
extern void _ZN7S1427C43v37Ev();
extern void _ZN7S1427C43v38Ev();
extern void _ZN7S1427C43v39Ev();
extern void _ZN7S1427C43v40Ev();
extern void _ZN7S1427C43v41Ev();
extern void _ZN7S1427C43v42Ev();
extern void _ZN7S1427C43v43Ev();
extern void _ZN7S1427C43v44Ev();
extern void _ZN7S1427C43v45Ev();
extern void _ZN7S1427C43v46Ev();
extern void _ZN7S1427C43v47Ev();
extern void _ZN7S1427C43v48Ev();
extern void _ZN7S1427C43v49Ev();
extern void _ZN7S1427C43v50Ev();
extern void _ZN7S1427C43v51Ev();
extern void _ZN7S1427C43v52Ev();
extern void _ZN7S1427C43v53Ev();
extern void _ZN7S1427C43v54Ev();
extern void _ZN7S1427C43v55Ev();
extern void _ZN7S1427C43v56Ev();
extern void _ZN7S1427C43v57Ev();
extern void _ZN7S1427C43v58Ev();
extern void _ZN7S1427C43v59Ev();
extern void _ZN7S1427C43v60Ev();
extern void _ZN7S1427C43v61Ev();
extern void _ZN7S1427C43v62Ev();
extern void _ZN7S1427C43v63Ev();
extern void _ZN7S1427C43v64Ev();
extern void _ZN7S1427C43v65Ev();
extern void _ZN7S1427C43v66Ev();
extern void _ZN7S1427C43v67Ev();
extern void _ZN7S1427C33v68Ev();
extern void _ZN7S1427C33v69Ev();
extern void _ZN7S1427C33v70Ev();
extern void _ZN7S1427C33v71Ev();
extern void _ZN7S1427C33v72Ev();
extern void _ZN7S1427C33v73Ev();
extern void _ZN7S1427C33v74Ev();
extern void _ZN7S1427C33v75Ev();
extern void _ZN7S1427C33v76Ev();
extern void _ZN7S1427C33v77Ev();
extern void _ZN7S1427C33v78Ev();
extern void _ZN7S1427C33v79Ev();
extern void _ZN7S1427C33v80Ev();
static  VTBL_ENTRY vtc_S1427C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1427C3[0]),
  (VTBL_ENTRY)&_ZN7S1427C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1427C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S1427C3[];
extern  VTBL_ENTRY _ZTV7S1427C3[];
Class_Descriptor cd_S1427C3 = {  "S1427C3", // class name
  bases_S1427C3, 1,
  &(vtc_S1427C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1427C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1427C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1427C2  : S1427C3 {
  unsigned int s1427c2f0:1;
  unsigned int s1427c2f1:1;
  unsigned int s1427c2f2:1;
  unsigned int s1427c2f3:1;
  ::S664C12_nt s1427c2f4;
  char s1427c2f5[2];
  ::S3432C14_nt s1427c2f6;
  ::S632C13 s1427c2f7;
  ::S3432C14_nt s1427c2f8;
  virtual  ~S1427C2(); // _ZN7S1427C2D1Ev
  virtual void  v81(); // _ZN7S1427C23v81Ev
  virtual void  v82(); // _ZN7S1427C23v82Ev
  virtual void  v83(); // _ZN7S1427C23v83Ev
  virtual void  v84(); // _ZN7S1427C23v84Ev
  virtual void  v85(); // _ZN7S1427C23v85Ev
  virtual void  v86(); // _ZN7S1427C23v86Ev
  virtual void  v87(); // _ZN7S1427C23v87Ev
  S1427C2(); // tgen
};
//SIG(-1 S1427C2) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S1427C2 ::~S1427C2(){ note_dtor("S1427C2", this);}
void  S1427C2 ::v81(){vfunc_called(this, "_ZN7S1427C23v81Ev");}
void  S1427C2 ::v82(){vfunc_called(this, "_ZN7S1427C23v82Ev");}
void  S1427C2 ::v83(){vfunc_called(this, "_ZN7S1427C23v83Ev");}
void  S1427C2 ::v84(){vfunc_called(this, "_ZN7S1427C23v84Ev");}
void  S1427C2 ::v85(){vfunc_called(this, "_ZN7S1427C23v85Ev");}
void  S1427C2 ::v86(){vfunc_called(this, "_ZN7S1427C23v86Ev");}
void  S1427C2 ::v87(){vfunc_called(this, "_ZN7S1427C23v87Ev");}
S1427C2 ::S1427C2(){ note_ctor("S1427C2", this);} // tgen

static void Test_S1427C2()
{
  extern Class_Descriptor cd_S1427C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1427C2, buf);
    S1427C2 *dp, &lv = *(dp=new (buf) S1427C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1427C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1427C2)");
    check_base_class_offset(lv, (S1427C4*)(S1427C3*), 0, "S1427C2");
    check_base_class_offset(lv, (S1427C3*), 0, "S1427C2");
    set_bf_and_test(lv, s1427c2f0, ABISELECT(204,148), 0, 1, 1, "S1427C2");
    set_bf_and_test(lv, s1427c2f1, ABISELECT(204,148), 1, 1, 1, "S1427C2");
    set_bf_and_test(lv, s1427c2f2, ABISELECT(204,148), 2, 1, 1, "S1427C2");
    set_bf_and_test(lv, s1427c2f3, ABISELECT(204,148), 3, 1, 1, "S1427C2");
    check_field_offset(lv, s1427c2f4, ABISELECT(208,152), "S1427C2.s1427c2f4");
    check_field_offset(lv, s1427c2f5, ABISELECT(220,164), "S1427C2.s1427c2f5");
    check_field_offset(lv, s1427c2f6, ABISELECT(224,168), "S1427C2.s1427c2f6");
    check_field_offset(lv, s1427c2f7, ABISELECT(232,176), "S1427C2.s1427c2f7");
    check_field_offset(lv, s1427c2f8, ABISELECT(244,188), "S1427C2.s1427c2f8");
    test_class_info(&lv, &cd_S1427C2);
    dp->~S1427C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1427C2(Test_S1427C2, "S1427C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1427C2C1Ev();
extern void _ZN7S1427C2D1Ev();
Name_Map name_map_S1427C2[] = {
  NSPAIR(_ZN7S1427C2C1Ev),
  NSPAIR(_ZN7S1427C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1427C4;
extern VTBL_ENTRY _ZTI7S1427C4[];
extern  VTBL_ENTRY _ZTV7S1427C4[];
extern Class_Descriptor cd_S1427C3;
extern VTBL_ENTRY _ZTI7S1427C3[];
extern  VTBL_ENTRY _ZTV7S1427C3[];
static Base_Class bases_S1427C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1427C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1427C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1427C2[];
extern void _ZN7S1427C2D1Ev();
extern void _ZN7S1427C2D0Ev();
extern void _ZN7S1427C42v4Ev();
extern void _ZN7S1427C42v5Ev();
extern void _ZN7S1427C42v6Ev();
extern void _ZN7S1427C42v7Ev();
extern void _ZN7S1427C42v8Ev();
extern void _ZN7S1427C42v9Ev();
extern void _ZN7S1427C43v10Ev();
extern void _ZN7S1427C43v11Ev();
extern void _ZN7S1427C43v12Ev();
extern void _ZN7S1427C43v13Ev();
extern void _ZN7S1427C43v14Ev();
extern void _ZN7S1427C43v15Ev();
extern void _ZN7S1427C43v16Ev();
extern void _ZN7S1427C43v17Ev();
extern void _ZN7S1427C43v18Ev();
extern void _ZN7S1427C43v19Ev();
extern void _ZN7S1427C43v20Ev();
extern void _ZN7S1427C43v21Ev();
extern void _ZN7S1427C43v22Ev();
extern void _ZN7S1427C43v23Ev();
extern void _ZN7S1427C43v24Ev();
extern void _ZN7S1427C43v25Ev();
extern void _ZN7S1427C43v26Ev();
extern void _ZN7S1427C43v27Ev();
extern void _ZN7S1427C43v28Ev();
extern void _ZN7S1427C43v29Ev();
extern void _ZN7S1427C43v30Ev();
extern void _ZN7S1427C43v31Ev();
extern void _ZN7S1427C43v32Ev();
extern void _ZN7S1427C43v33Ev();
extern void _ZN7S1427C43v34Ev();
extern void _ZN7S1427C43v35Ev();
extern void _ZN7S1427C43v36Ev();
extern void _ZN7S1427C43v37Ev();
extern void _ZN7S1427C43v38Ev();
extern void _ZN7S1427C43v39Ev();
extern void _ZN7S1427C43v40Ev();
extern void _ZN7S1427C43v41Ev();
extern void _ZN7S1427C43v42Ev();
extern void _ZN7S1427C43v43Ev();
extern void _ZN7S1427C43v44Ev();
extern void _ZN7S1427C43v45Ev();
extern void _ZN7S1427C43v46Ev();
extern void _ZN7S1427C43v47Ev();
extern void _ZN7S1427C43v48Ev();
extern void _ZN7S1427C43v49Ev();
extern void _ZN7S1427C43v50Ev();
extern void _ZN7S1427C43v51Ev();
extern void _ZN7S1427C43v52Ev();
extern void _ZN7S1427C43v53Ev();
extern void _ZN7S1427C43v54Ev();
extern void _ZN7S1427C43v55Ev();
extern void _ZN7S1427C43v56Ev();
extern void _ZN7S1427C43v57Ev();
extern void _ZN7S1427C43v58Ev();
extern void _ZN7S1427C43v59Ev();
extern void _ZN7S1427C43v60Ev();
extern void _ZN7S1427C43v61Ev();
extern void _ZN7S1427C43v62Ev();
extern void _ZN7S1427C43v63Ev();
extern void _ZN7S1427C43v64Ev();
extern void _ZN7S1427C43v65Ev();
extern void _ZN7S1427C43v66Ev();
extern void _ZN7S1427C43v67Ev();
extern void _ZN7S1427C33v68Ev();
extern void _ZN7S1427C33v69Ev();
extern void _ZN7S1427C33v70Ev();
extern void _ZN7S1427C33v71Ev();
extern void _ZN7S1427C33v72Ev();
extern void _ZN7S1427C33v73Ev();
extern void _ZN7S1427C33v74Ev();
extern void _ZN7S1427C33v75Ev();
extern void _ZN7S1427C33v76Ev();
extern void _ZN7S1427C33v77Ev();
extern void _ZN7S1427C33v78Ev();
extern void _ZN7S1427C33v79Ev();
extern void _ZN7S1427C33v80Ev();
extern void _ZN7S1427C23v81Ev();
extern void _ZN7S1427C23v82Ev();
extern void _ZN7S1427C23v83Ev();
extern void _ZN7S1427C23v84Ev();
extern void _ZN7S1427C23v85Ev();
extern void _ZN7S1427C23v86Ev();
extern void _ZN7S1427C23v87Ev();
static  VTBL_ENTRY vtc_S1427C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1427C2[0]),
  (VTBL_ENTRY)&_ZN7S1427C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1427C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1427C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1427C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1427C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1427C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1427C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1427C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1427C23v87Ev,
};
extern VTBL_ENTRY _ZTI7S1427C2[];
extern  VTBL_ENTRY _ZTV7S1427C2[];
Class_Descriptor cd_S1427C2 = {  "S1427C2", // class name
  bases_S1427C2, 2,
  &(vtc_S1427C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1427C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1427C2),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1427C1  : S1427C2 {
  int s1427c1f0[2];
  unsigned int s1427c1f1:1;
  int s1427c1f2[2];
  virtual  ~S1427C1(); // _ZN7S1427C1D1Ev
  virtual void  v1(); // _ZN7S1427C12v1Ev
  virtual void  v2(); // _ZN7S1427C12v2Ev
  virtual void  v3(); // _ZN7S1427C12v3Ev
  S1427C1(); // tgen
};
//SIG(1 S1427C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 Fi[2] Fi:1 Fi[2]}


 S1427C1 ::~S1427C1(){ note_dtor("S1427C1", this);}
void  S1427C1 ::v1(){vfunc_called(this, "_ZN7S1427C12v1Ev");}
void  S1427C1 ::v2(){vfunc_called(this, "_ZN7S1427C12v2Ev");}
void  S1427C1 ::v3(){vfunc_called(this, "_ZN7S1427C12v3Ev");}
S1427C1 ::S1427C1(){ note_ctor("S1427C1", this);} // tgen

static void Test_S1427C1()
{
  extern Class_Descriptor cd_S1427C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,55)];
    init_test(&cd_S1427C1, buf);
    S1427C1 *dp, &lv = *(dp=new (buf) S1427C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,216), "sizeof(S1427C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1427C1)");
    check_base_class_offset(lv, (S1427C4*)(S1427C3*)(S1427C2*), 0, "S1427C1");
    check_base_class_offset(lv, (S1427C3*)(S1427C2*), 0, "S1427C1");
    check_base_class_offset(lv, (S1427C2*), 0, "S1427C1");
    check_field_offset(lv, s1427c1f0, ABISELECT(252,196), "S1427C1.s1427c1f0");
    set_bf_and_test(lv, s1427c1f1, ABISELECT(260,204), 0, 1, 1, "S1427C1");
    check_field_offset(lv, s1427c1f2, ABISELECT(264,208), "S1427C1.s1427c1f2");
    test_class_info(&lv, &cd_S1427C1);
    dp->~S1427C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1427C1(Test_S1427C1, "S1427C1", ABISELECT(272,216));

#else // __cplusplus

extern void _ZN7S1427C1C1Ev();
extern void _ZN7S1427C1D1Ev();
Name_Map name_map_S1427C1[] = {
  NSPAIR(_ZN7S1427C1C1Ev),
  NSPAIR(_ZN7S1427C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1427C4;
extern VTBL_ENTRY _ZTI7S1427C4[];
extern  VTBL_ENTRY _ZTV7S1427C4[];
extern Class_Descriptor cd_S1427C3;
extern VTBL_ENTRY _ZTI7S1427C3[];
extern  VTBL_ENTRY _ZTV7S1427C3[];
extern Class_Descriptor cd_S1427C2;
extern VTBL_ENTRY _ZTI7S1427C2[];
extern  VTBL_ENTRY _ZTV7S1427C2[];
static Base_Class bases_S1427C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1427C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1427C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1427C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1427C1[];
extern void _ZN7S1427C1D1Ev();
extern void _ZN7S1427C1D0Ev();
extern void _ZN7S1427C42v4Ev();
extern void _ZN7S1427C42v5Ev();
extern void _ZN7S1427C42v6Ev();
extern void _ZN7S1427C42v7Ev();
extern void _ZN7S1427C42v8Ev();
extern void _ZN7S1427C42v9Ev();
extern void _ZN7S1427C43v10Ev();
extern void _ZN7S1427C43v11Ev();
extern void _ZN7S1427C43v12Ev();
extern void _ZN7S1427C43v13Ev();
extern void _ZN7S1427C43v14Ev();
extern void _ZN7S1427C43v15Ev();
extern void _ZN7S1427C43v16Ev();
extern void _ZN7S1427C43v17Ev();
extern void _ZN7S1427C43v18Ev();
extern void _ZN7S1427C43v19Ev();
extern void _ZN7S1427C43v20Ev();
extern void _ZN7S1427C43v21Ev();
extern void _ZN7S1427C43v22Ev();
extern void _ZN7S1427C43v23Ev();
extern void _ZN7S1427C43v24Ev();
extern void _ZN7S1427C43v25Ev();
extern void _ZN7S1427C43v26Ev();
extern void _ZN7S1427C43v27Ev();
extern void _ZN7S1427C43v28Ev();
extern void _ZN7S1427C43v29Ev();
extern void _ZN7S1427C43v30Ev();
extern void _ZN7S1427C43v31Ev();
extern void _ZN7S1427C43v32Ev();
extern void _ZN7S1427C43v33Ev();
extern void _ZN7S1427C43v34Ev();
extern void _ZN7S1427C43v35Ev();
extern void _ZN7S1427C43v36Ev();
extern void _ZN7S1427C43v37Ev();
extern void _ZN7S1427C43v38Ev();
extern void _ZN7S1427C43v39Ev();
extern void _ZN7S1427C43v40Ev();
extern void _ZN7S1427C43v41Ev();
extern void _ZN7S1427C43v42Ev();
extern void _ZN7S1427C43v43Ev();
extern void _ZN7S1427C43v44Ev();
extern void _ZN7S1427C43v45Ev();
extern void _ZN7S1427C43v46Ev();
extern void _ZN7S1427C43v47Ev();
extern void _ZN7S1427C43v48Ev();
extern void _ZN7S1427C43v49Ev();
extern void _ZN7S1427C43v50Ev();
extern void _ZN7S1427C43v51Ev();
extern void _ZN7S1427C43v52Ev();
extern void _ZN7S1427C43v53Ev();
extern void _ZN7S1427C43v54Ev();
extern void _ZN7S1427C43v55Ev();
extern void _ZN7S1427C43v56Ev();
extern void _ZN7S1427C43v57Ev();
extern void _ZN7S1427C43v58Ev();
extern void _ZN7S1427C43v59Ev();
extern void _ZN7S1427C43v60Ev();
extern void _ZN7S1427C43v61Ev();
extern void _ZN7S1427C43v62Ev();
extern void _ZN7S1427C43v63Ev();
extern void _ZN7S1427C43v64Ev();
extern void _ZN7S1427C43v65Ev();
extern void _ZN7S1427C43v66Ev();
extern void _ZN7S1427C43v67Ev();
extern void _ZN7S1427C33v68Ev();
extern void _ZN7S1427C33v69Ev();
extern void _ZN7S1427C33v70Ev();
extern void _ZN7S1427C33v71Ev();
extern void _ZN7S1427C33v72Ev();
extern void _ZN7S1427C33v73Ev();
extern void _ZN7S1427C33v74Ev();
extern void _ZN7S1427C33v75Ev();
extern void _ZN7S1427C33v76Ev();
extern void _ZN7S1427C33v77Ev();
extern void _ZN7S1427C33v78Ev();
extern void _ZN7S1427C33v79Ev();
extern void _ZN7S1427C33v80Ev();
extern void _ZN7S1427C23v81Ev();
extern void _ZN7S1427C23v82Ev();
extern void _ZN7S1427C23v83Ev();
extern void _ZN7S1427C23v84Ev();
extern void _ZN7S1427C23v85Ev();
extern void _ZN7S1427C23v86Ev();
extern void _ZN7S1427C23v87Ev();
extern void _ZN7S1427C12v1Ev();
extern void _ZN7S1427C12v2Ev();
extern void _ZN7S1427C12v3Ev();
static  VTBL_ENTRY vtc_S1427C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1427C1[0]),
  (VTBL_ENTRY)&_ZN7S1427C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1427C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1427C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1427C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1427C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1427C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1427C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1427C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1427C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1427C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1427C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1427C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1427C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1427C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1427C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1427C1[];
extern  VTBL_ENTRY _ZTV7S1427C1[];
Class_Descriptor cd_S1427C1 = {  "S1427C1", // class name
  bases_S1427C1, 3,
  &(vtc_S1427C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,216), // object size
  NSPAIRA(_ZTI7S1427C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1427C1),91, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1423C4  {
  int s1423c4f0;
  __tsi64 s1423c4f1;
  void *s1423c4f2[4];
  int s1423c4f3[2];
  void *s1423c4f4;
  ::S3432C14_nt s1423c4f5;
  void *s1423c4f6[2];
  virtual  ~S1423C4(); // _ZN7S1423C4D1Ev
  virtual void  v4(); // _ZN7S1423C42v4Ev
  virtual void  v5(); // _ZN7S1423C42v5Ev
  virtual void  v6(); // _ZN7S1423C42v6Ev
  virtual void  v7(); // _ZN7S1423C42v7Ev
  virtual void  v8(); // _ZN7S1423C42v8Ev
  virtual void  v9(); // _ZN7S1423C42v9Ev
  virtual void  v10(); // _ZN7S1423C43v10Ev
  virtual void  v11(); // _ZN7S1423C43v11Ev
  virtual void  v12(); // _ZN7S1423C43v12Ev
  virtual void  v13(); // _ZN7S1423C43v13Ev
  virtual void  v14(); // _ZN7S1423C43v14Ev
  virtual void  v15(); // _ZN7S1423C43v15Ev
  virtual void  v16(); // _ZN7S1423C43v16Ev
  virtual void  v17(); // _ZN7S1423C43v17Ev
  virtual void  v18(); // _ZN7S1423C43v18Ev
  virtual void  v19(); // _ZN7S1423C43v19Ev
  virtual void  v20(); // _ZN7S1423C43v20Ev
  virtual void  v21(); // _ZN7S1423C43v21Ev
  virtual void  v22(); // _ZN7S1423C43v22Ev
  virtual void  v23(); // _ZN7S1423C43v23Ev
  virtual void  v24(); // _ZN7S1423C43v24Ev
  virtual void  v25(); // _ZN7S1423C43v25Ev
  virtual void  v26(); // _ZN7S1423C43v26Ev
  virtual void  v27(); // _ZN7S1423C43v27Ev
  virtual void  v28(); // _ZN7S1423C43v28Ev
  virtual void  v29(); // _ZN7S1423C43v29Ev
  virtual void  v30(); // _ZN7S1423C43v30Ev
  virtual void  v31(); // _ZN7S1423C43v31Ev
  virtual void  v32(); // _ZN7S1423C43v32Ev
  virtual void  v33(); // _ZN7S1423C43v33Ev
  virtual void  v34(); // _ZN7S1423C43v34Ev
  virtual void  v35(); // _ZN7S1423C43v35Ev
  virtual void  v36(); // _ZN7S1423C43v36Ev
  virtual void  v37(); // _ZN7S1423C43v37Ev
  virtual void  v38(); // _ZN7S1423C43v38Ev
  virtual void  v39(); // _ZN7S1423C43v39Ev
  virtual void  v40(); // _ZN7S1423C43v40Ev
  virtual void  v41(); // _ZN7S1423C43v41Ev
  virtual void  v42(); // _ZN7S1423C43v42Ev
  virtual void  v43(); // _ZN7S1423C43v43Ev
  virtual void  v44(); // _ZN7S1423C43v44Ev
  virtual void  v45(); // _ZN7S1423C43v45Ev
  virtual void  v46(); // _ZN7S1423C43v46Ev
  virtual void  v47(); // _ZN7S1423C43v47Ev
  virtual void  v48(); // _ZN7S1423C43v48Ev
  virtual void  v49(); // _ZN7S1423C43v49Ev
  virtual void  v50(); // _ZN7S1423C43v50Ev
  virtual void  v51(); // _ZN7S1423C43v51Ev
  virtual void  v52(); // _ZN7S1423C43v52Ev
  virtual void  v53(); // _ZN7S1423C43v53Ev
  virtual void  v54(); // _ZN7S1423C43v54Ev
  virtual void  v55(); // _ZN7S1423C43v55Ev
  virtual void  v56(); // _ZN7S1423C43v56Ev
  virtual void  v57(); // _ZN7S1423C43v57Ev
  virtual void  v58(); // _ZN7S1423C43v58Ev
  virtual void  v59(); // _ZN7S1423C43v59Ev
  virtual void  v60(); // _ZN7S1423C43v60Ev
  virtual void  v61(); // _ZN7S1423C43v61Ev
  virtual void  v62(); // _ZN7S1423C43v62Ev
  virtual void  v63(); // _ZN7S1423C43v63Ev
  virtual void  v64(); // _ZN7S1423C43v64Ev
  virtual void  v65(); // _ZN7S1423C43v65Ev
  virtual void  v66(); // _ZN7S1423C43v66Ev
  virtual void  v67(); // _ZN7S1423C43v67Ev
  S1423C4(); // tgen
};
//SIG(-1 S1423C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1423C4 ::~S1423C4(){ note_dtor("S1423C4", this);}
void  S1423C4 ::v4(){vfunc_called(this, "_ZN7S1423C42v4Ev");}
void  S1423C4 ::v5(){vfunc_called(this, "_ZN7S1423C42v5Ev");}
void  S1423C4 ::v6(){vfunc_called(this, "_ZN7S1423C42v6Ev");}
void  S1423C4 ::v7(){vfunc_called(this, "_ZN7S1423C42v7Ev");}
void  S1423C4 ::v8(){vfunc_called(this, "_ZN7S1423C42v8Ev");}
void  S1423C4 ::v9(){vfunc_called(this, "_ZN7S1423C42v9Ev");}
void  S1423C4 ::v10(){vfunc_called(this, "_ZN7S1423C43v10Ev");}
void  S1423C4 ::v11(){vfunc_called(this, "_ZN7S1423C43v11Ev");}
void  S1423C4 ::v12(){vfunc_called(this, "_ZN7S1423C43v12Ev");}
void  S1423C4 ::v13(){vfunc_called(this, "_ZN7S1423C43v13Ev");}
void  S1423C4 ::v14(){vfunc_called(this, "_ZN7S1423C43v14Ev");}
void  S1423C4 ::v15(){vfunc_called(this, "_ZN7S1423C43v15Ev");}
void  S1423C4 ::v16(){vfunc_called(this, "_ZN7S1423C43v16Ev");}
void  S1423C4 ::v17(){vfunc_called(this, "_ZN7S1423C43v17Ev");}
void  S1423C4 ::v18(){vfunc_called(this, "_ZN7S1423C43v18Ev");}
void  S1423C4 ::v19(){vfunc_called(this, "_ZN7S1423C43v19Ev");}
void  S1423C4 ::v20(){vfunc_called(this, "_ZN7S1423C43v20Ev");}
void  S1423C4 ::v21(){vfunc_called(this, "_ZN7S1423C43v21Ev");}
void  S1423C4 ::v22(){vfunc_called(this, "_ZN7S1423C43v22Ev");}
void  S1423C4 ::v23(){vfunc_called(this, "_ZN7S1423C43v23Ev");}
void  S1423C4 ::v24(){vfunc_called(this, "_ZN7S1423C43v24Ev");}
void  S1423C4 ::v25(){vfunc_called(this, "_ZN7S1423C43v25Ev");}
void  S1423C4 ::v26(){vfunc_called(this, "_ZN7S1423C43v26Ev");}
void  S1423C4 ::v27(){vfunc_called(this, "_ZN7S1423C43v27Ev");}
void  S1423C4 ::v28(){vfunc_called(this, "_ZN7S1423C43v28Ev");}
void  S1423C4 ::v29(){vfunc_called(this, "_ZN7S1423C43v29Ev");}
void  S1423C4 ::v30(){vfunc_called(this, "_ZN7S1423C43v30Ev");}
void  S1423C4 ::v31(){vfunc_called(this, "_ZN7S1423C43v31Ev");}
void  S1423C4 ::v32(){vfunc_called(this, "_ZN7S1423C43v32Ev");}
void  S1423C4 ::v33(){vfunc_called(this, "_ZN7S1423C43v33Ev");}
void  S1423C4 ::v34(){vfunc_called(this, "_ZN7S1423C43v34Ev");}
void  S1423C4 ::v35(){vfunc_called(this, "_ZN7S1423C43v35Ev");}
void  S1423C4 ::v36(){vfunc_called(this, "_ZN7S1423C43v36Ev");}
void  S1423C4 ::v37(){vfunc_called(this, "_ZN7S1423C43v37Ev");}
void  S1423C4 ::v38(){vfunc_called(this, "_ZN7S1423C43v38Ev");}
void  S1423C4 ::v39(){vfunc_called(this, "_ZN7S1423C43v39Ev");}
void  S1423C4 ::v40(){vfunc_called(this, "_ZN7S1423C43v40Ev");}
void  S1423C4 ::v41(){vfunc_called(this, "_ZN7S1423C43v41Ev");}
void  S1423C4 ::v42(){vfunc_called(this, "_ZN7S1423C43v42Ev");}
void  S1423C4 ::v43(){vfunc_called(this, "_ZN7S1423C43v43Ev");}
void  S1423C4 ::v44(){vfunc_called(this, "_ZN7S1423C43v44Ev");}
void  S1423C4 ::v45(){vfunc_called(this, "_ZN7S1423C43v45Ev");}
void  S1423C4 ::v46(){vfunc_called(this, "_ZN7S1423C43v46Ev");}
void  S1423C4 ::v47(){vfunc_called(this, "_ZN7S1423C43v47Ev");}
void  S1423C4 ::v48(){vfunc_called(this, "_ZN7S1423C43v48Ev");}
void  S1423C4 ::v49(){vfunc_called(this, "_ZN7S1423C43v49Ev");}
void  S1423C4 ::v50(){vfunc_called(this, "_ZN7S1423C43v50Ev");}
void  S1423C4 ::v51(){vfunc_called(this, "_ZN7S1423C43v51Ev");}
void  S1423C4 ::v52(){vfunc_called(this, "_ZN7S1423C43v52Ev");}
void  S1423C4 ::v53(){vfunc_called(this, "_ZN7S1423C43v53Ev");}
void  S1423C4 ::v54(){vfunc_called(this, "_ZN7S1423C43v54Ev");}
void  S1423C4 ::v55(){vfunc_called(this, "_ZN7S1423C43v55Ev");}
void  S1423C4 ::v56(){vfunc_called(this, "_ZN7S1423C43v56Ev");}
void  S1423C4 ::v57(){vfunc_called(this, "_ZN7S1423C43v57Ev");}
void  S1423C4 ::v58(){vfunc_called(this, "_ZN7S1423C43v58Ev");}
void  S1423C4 ::v59(){vfunc_called(this, "_ZN7S1423C43v59Ev");}
void  S1423C4 ::v60(){vfunc_called(this, "_ZN7S1423C43v60Ev");}
void  S1423C4 ::v61(){vfunc_called(this, "_ZN7S1423C43v61Ev");}
void  S1423C4 ::v62(){vfunc_called(this, "_ZN7S1423C43v62Ev");}
void  S1423C4 ::v63(){vfunc_called(this, "_ZN7S1423C43v63Ev");}
void  S1423C4 ::v64(){vfunc_called(this, "_ZN7S1423C43v64Ev");}
void  S1423C4 ::v65(){vfunc_called(this, "_ZN7S1423C43v65Ev");}
void  S1423C4 ::v66(){vfunc_called(this, "_ZN7S1423C43v66Ev");}
void  S1423C4 ::v67(){vfunc_called(this, "_ZN7S1423C43v67Ev");}
S1423C4 ::S1423C4(){ note_ctor("S1423C4", this);} // tgen

static void Test_S1423C4()
{
  extern Class_Descriptor cd_S1423C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1423C4, buf);
    S1423C4 *dp, &lv = *(dp=new (buf) S1423C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1423C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1423C4)");
    check_field_offset(lv, s1423c4f0, ABISELECT(8,4), "S1423C4.s1423c4f0");
    check_field_offset(lv, s1423c4f1, ABISELECT(16,8), "S1423C4.s1423c4f1");
    check_field_offset(lv, s1423c4f2, ABISELECT(24,16), "S1423C4.s1423c4f2");
    check_field_offset(lv, s1423c4f3, ABISELECT(56,32), "S1423C4.s1423c4f3");
    check_field_offset(lv, s1423c4f4, ABISELECT(64,40), "S1423C4.s1423c4f4");
    check_field_offset(lv, s1423c4f5, ABISELECT(72,44), "S1423C4.s1423c4f5");
    check_field_offset(lv, s1423c4f6, ABISELECT(80,52), "S1423C4.s1423c4f6");
    test_class_info(&lv, &cd_S1423C4);
    dp->~S1423C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1423C4(Test_S1423C4, "S1423C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1423C4C1Ev();
extern void _ZN7S1423C4D1Ev();
Name_Map name_map_S1423C4[] = {
  NSPAIR(_ZN7S1423C4C1Ev),
  NSPAIR(_ZN7S1423C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1423C4[];
extern void _ZN7S1423C4D1Ev();
extern void _ZN7S1423C4D0Ev();
extern void _ZN7S1423C42v4Ev();
extern void _ZN7S1423C42v5Ev();
extern void _ZN7S1423C42v6Ev();
extern void _ZN7S1423C42v7Ev();
extern void _ZN7S1423C42v8Ev();
extern void _ZN7S1423C42v9Ev();
extern void _ZN7S1423C43v10Ev();
extern void _ZN7S1423C43v11Ev();
extern void _ZN7S1423C43v12Ev();
extern void _ZN7S1423C43v13Ev();
extern void _ZN7S1423C43v14Ev();
extern void _ZN7S1423C43v15Ev();
extern void _ZN7S1423C43v16Ev();
extern void _ZN7S1423C43v17Ev();
extern void _ZN7S1423C43v18Ev();
extern void _ZN7S1423C43v19Ev();
extern void _ZN7S1423C43v20Ev();
extern void _ZN7S1423C43v21Ev();
extern void _ZN7S1423C43v22Ev();
extern void _ZN7S1423C43v23Ev();
extern void _ZN7S1423C43v24Ev();
extern void _ZN7S1423C43v25Ev();
extern void _ZN7S1423C43v26Ev();
extern void _ZN7S1423C43v27Ev();
extern void _ZN7S1423C43v28Ev();
extern void _ZN7S1423C43v29Ev();
extern void _ZN7S1423C43v30Ev();
extern void _ZN7S1423C43v31Ev();
extern void _ZN7S1423C43v32Ev();
extern void _ZN7S1423C43v33Ev();
extern void _ZN7S1423C43v34Ev();
extern void _ZN7S1423C43v35Ev();
extern void _ZN7S1423C43v36Ev();
extern void _ZN7S1423C43v37Ev();
extern void _ZN7S1423C43v38Ev();
extern void _ZN7S1423C43v39Ev();
extern void _ZN7S1423C43v40Ev();
extern void _ZN7S1423C43v41Ev();
extern void _ZN7S1423C43v42Ev();
extern void _ZN7S1423C43v43Ev();
extern void _ZN7S1423C43v44Ev();
extern void _ZN7S1423C43v45Ev();
extern void _ZN7S1423C43v46Ev();
extern void _ZN7S1423C43v47Ev();
extern void _ZN7S1423C43v48Ev();
extern void _ZN7S1423C43v49Ev();
extern void _ZN7S1423C43v50Ev();
extern void _ZN7S1423C43v51Ev();
extern void _ZN7S1423C43v52Ev();
extern void _ZN7S1423C43v53Ev();
extern void _ZN7S1423C43v54Ev();
extern void _ZN7S1423C43v55Ev();
extern void _ZN7S1423C43v56Ev();
extern void _ZN7S1423C43v57Ev();
extern void _ZN7S1423C43v58Ev();
extern void _ZN7S1423C43v59Ev();
extern void _ZN7S1423C43v60Ev();
extern void _ZN7S1423C43v61Ev();
extern void _ZN7S1423C43v62Ev();
extern void _ZN7S1423C43v63Ev();
extern void _ZN7S1423C43v64Ev();
extern void _ZN7S1423C43v65Ev();
extern void _ZN7S1423C43v66Ev();
extern void _ZN7S1423C43v67Ev();
static  VTBL_ENTRY vtc_S1423C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1423C4[0]),
  (VTBL_ENTRY)&_ZN7S1423C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1423C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v67Ev,
};
extern VTBL_ENTRY _ZTI7S1423C4[];
extern  VTBL_ENTRY _ZTV7S1423C4[];
Class_Descriptor cd_S1423C4 = {  "S1423C4", // class name
  0,0,//no base classes
  &(vtc_S1423C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1423C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1423C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1423C3  : S1423C4 {
  void *s1423c3f0;
  ::S3432C14_nt s1423c3f1;
  int s1423c3f2[5];
  unsigned int s1423c3f3:1;
  unsigned int s1423c3f4:1;
  unsigned int s1423c3f5:1;
  unsigned int s1423c3f6:1;
  unsigned int s1423c3f7:1;
  ::S273C21 s1423c3f8;
  ::S273C17 s1423c3f9;
  unsigned int s1423c3f10:1;
  int s1423c3f11[2];
  void *s1423c3f12;
  int s1423c3f13[3];
  virtual  ~S1423C3(); // _ZN7S1423C3D1Ev
  virtual void  v68(); // _ZN7S1423C33v68Ev
  virtual void  v69(); // _ZN7S1423C33v69Ev
  virtual void  v70(); // _ZN7S1423C33v70Ev
  virtual void  v71(); // _ZN7S1423C33v71Ev
  virtual void  v72(); // _ZN7S1423C33v72Ev
  virtual void  v73(); // _ZN7S1423C33v73Ev
  virtual void  v74(); // _ZN7S1423C33v74Ev
  virtual void  v75(); // _ZN7S1423C33v75Ev
  virtual void  v76(); // _ZN7S1423C33v76Ev
  virtual void  v77(); // _ZN7S1423C33v77Ev
  virtual void  v78(); // _ZN7S1423C33v78Ev
  virtual void  v79(); // _ZN7S1423C33v79Ev
  virtual void  v80(); // _ZN7S1423C33v80Ev
  S1423C3(); // tgen
};
//SIG(-1 S1423C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1423C3 ::~S1423C3(){ note_dtor("S1423C3", this);}
void  S1423C3 ::v68(){vfunc_called(this, "_ZN7S1423C33v68Ev");}
void  S1423C3 ::v69(){vfunc_called(this, "_ZN7S1423C33v69Ev");}
void  S1423C3 ::v70(){vfunc_called(this, "_ZN7S1423C33v70Ev");}
void  S1423C3 ::v71(){vfunc_called(this, "_ZN7S1423C33v71Ev");}
void  S1423C3 ::v72(){vfunc_called(this, "_ZN7S1423C33v72Ev");}
void  S1423C3 ::v73(){vfunc_called(this, "_ZN7S1423C33v73Ev");}
void  S1423C3 ::v74(){vfunc_called(this, "_ZN7S1423C33v74Ev");}
void  S1423C3 ::v75(){vfunc_called(this, "_ZN7S1423C33v75Ev");}
void  S1423C3 ::v76(){vfunc_called(this, "_ZN7S1423C33v76Ev");}
void  S1423C3 ::v77(){vfunc_called(this, "_ZN7S1423C33v77Ev");}
void  S1423C3 ::v78(){vfunc_called(this, "_ZN7S1423C33v78Ev");}
void  S1423C3 ::v79(){vfunc_called(this, "_ZN7S1423C33v79Ev");}
void  S1423C3 ::v80(){vfunc_called(this, "_ZN7S1423C33v80Ev");}
S1423C3 ::S1423C3(){ note_ctor("S1423C3", this);} // tgen

static void Test_S1423C3()
{
  extern Class_Descriptor cd_S1423C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1423C3, buf);
    S1423C3 *dp, &lv = *(dp=new (buf) S1423C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1423C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1423C3)");
    check_base_class_offset(lv, (S1423C4*), 0, "S1423C3");
    check_field_offset(lv, s1423c3f0, ABISELECT(96,60), "S1423C3.s1423c3f0");
    check_field_offset(lv, s1423c3f1, ABISELECT(104,64), "S1423C3.s1423c3f1");
    check_field_offset(lv, s1423c3f2, ABISELECT(112,72), "S1423C3.s1423c3f2");
    set_bf_and_test(lv, s1423c3f3, ABISELECT(132,92), 0, 1, 1, "S1423C3");
    set_bf_and_test(lv, s1423c3f4, ABISELECT(132,92), 1, 1, 1, "S1423C3");
    set_bf_and_test(lv, s1423c3f5, ABISELECT(132,92), 2, 1, 1, "S1423C3");
    set_bf_and_test(lv, s1423c3f6, ABISELECT(132,92), 3, 1, 1, "S1423C3");
    set_bf_and_test(lv, s1423c3f7, ABISELECT(132,92), 4, 1, 1, "S1423C3");
    check_field_offset(lv, s1423c3f8, ABISELECT(136,96), "S1423C3.s1423c3f8");
    check_field_offset(lv, s1423c3f9, ABISELECT(152,108), "S1423C3.s1423c3f9");
    set_bf_and_test(lv, s1423c3f10, ABISELECT(168,120), 0, 1, 1, "S1423C3");
    check_field_offset(lv, s1423c3f11, ABISELECT(172,124), "S1423C3.s1423c3f11");
    check_field_offset(lv, s1423c3f12, ABISELECT(184,132), "S1423C3.s1423c3f12");
    check_field_offset(lv, s1423c3f13, ABISELECT(192,136), "S1423C3.s1423c3f13");
    test_class_info(&lv, &cd_S1423C3);
    dp->~S1423C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1423C3(Test_S1423C3, "S1423C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1423C3C1Ev();
extern void _ZN7S1423C3D1Ev();
Name_Map name_map_S1423C3[] = {
  NSPAIR(_ZN7S1423C3C1Ev),
  NSPAIR(_ZN7S1423C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1423C4;
extern VTBL_ENTRY _ZTI7S1423C4[];
extern  VTBL_ENTRY _ZTV7S1423C4[];
static Base_Class bases_S1423C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1423C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1423C3[];
extern void _ZN7S1423C3D1Ev();
extern void _ZN7S1423C3D0Ev();
extern void _ZN7S1423C42v4Ev();
extern void _ZN7S1423C42v5Ev();
extern void _ZN7S1423C42v6Ev();
extern void _ZN7S1423C42v7Ev();
extern void _ZN7S1423C42v8Ev();
extern void _ZN7S1423C42v9Ev();
extern void _ZN7S1423C43v10Ev();
extern void _ZN7S1423C43v11Ev();
extern void _ZN7S1423C43v12Ev();
extern void _ZN7S1423C43v13Ev();
extern void _ZN7S1423C43v14Ev();
extern void _ZN7S1423C43v15Ev();
extern void _ZN7S1423C43v16Ev();
extern void _ZN7S1423C43v17Ev();
extern void _ZN7S1423C43v18Ev();
extern void _ZN7S1423C43v19Ev();
extern void _ZN7S1423C43v20Ev();
extern void _ZN7S1423C43v21Ev();
extern void _ZN7S1423C43v22Ev();
extern void _ZN7S1423C43v23Ev();
extern void _ZN7S1423C43v24Ev();
extern void _ZN7S1423C43v25Ev();
extern void _ZN7S1423C43v26Ev();
extern void _ZN7S1423C43v27Ev();
extern void _ZN7S1423C43v28Ev();
extern void _ZN7S1423C43v29Ev();
extern void _ZN7S1423C43v30Ev();
extern void _ZN7S1423C43v31Ev();
extern void _ZN7S1423C43v32Ev();
extern void _ZN7S1423C43v33Ev();
extern void _ZN7S1423C43v34Ev();
extern void _ZN7S1423C43v35Ev();
extern void _ZN7S1423C43v36Ev();
extern void _ZN7S1423C43v37Ev();
extern void _ZN7S1423C43v38Ev();
extern void _ZN7S1423C43v39Ev();
extern void _ZN7S1423C43v40Ev();
extern void _ZN7S1423C43v41Ev();
extern void _ZN7S1423C43v42Ev();
extern void _ZN7S1423C43v43Ev();
extern void _ZN7S1423C43v44Ev();
extern void _ZN7S1423C43v45Ev();
extern void _ZN7S1423C43v46Ev();
extern void _ZN7S1423C43v47Ev();
extern void _ZN7S1423C43v48Ev();
extern void _ZN7S1423C43v49Ev();
extern void _ZN7S1423C43v50Ev();
extern void _ZN7S1423C43v51Ev();
extern void _ZN7S1423C43v52Ev();
extern void _ZN7S1423C43v53Ev();
extern void _ZN7S1423C43v54Ev();
extern void _ZN7S1423C43v55Ev();
extern void _ZN7S1423C43v56Ev();
extern void _ZN7S1423C43v57Ev();
extern void _ZN7S1423C43v58Ev();
extern void _ZN7S1423C43v59Ev();
extern void _ZN7S1423C43v60Ev();
extern void _ZN7S1423C43v61Ev();
extern void _ZN7S1423C43v62Ev();
extern void _ZN7S1423C43v63Ev();
extern void _ZN7S1423C43v64Ev();
extern void _ZN7S1423C43v65Ev();
extern void _ZN7S1423C43v66Ev();
extern void _ZN7S1423C43v67Ev();
extern void _ZN7S1423C33v68Ev();
extern void _ZN7S1423C33v69Ev();
extern void _ZN7S1423C33v70Ev();
extern void _ZN7S1423C33v71Ev();
extern void _ZN7S1423C33v72Ev();
extern void _ZN7S1423C33v73Ev();
extern void _ZN7S1423C33v74Ev();
extern void _ZN7S1423C33v75Ev();
extern void _ZN7S1423C33v76Ev();
extern void _ZN7S1423C33v77Ev();
extern void _ZN7S1423C33v78Ev();
extern void _ZN7S1423C33v79Ev();
extern void _ZN7S1423C33v80Ev();
static  VTBL_ENTRY vtc_S1423C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1423C3[0]),
  (VTBL_ENTRY)&_ZN7S1423C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1423C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S1423C3[];
extern  VTBL_ENTRY _ZTV7S1423C3[];
Class_Descriptor cd_S1423C3 = {  "S1423C3", // class name
  bases_S1423C3, 1,
  &(vtc_S1423C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1423C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1423C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1423C2  : S1423C3 {
  unsigned int s1423c2f0:1;
  unsigned int s1423c2f1:1;
  unsigned int s1423c2f2:1;
  unsigned int s1423c2f3:1;
  ::S664C12_nt s1423c2f4;
  char s1423c2f5[2];
  ::S3432C14_nt s1423c2f6;
  ::S632C13 s1423c2f7;
  ::S3432C14_nt s1423c2f8;
  virtual  ~S1423C2(); // _ZN7S1423C2D1Ev
  virtual void  v81(); // _ZN7S1423C23v81Ev
  virtual void  v82(); // _ZN7S1423C23v82Ev
  virtual void  v83(); // _ZN7S1423C23v83Ev
  virtual void  v84(); // _ZN7S1423C23v84Ev
  virtual void  v85(); // _ZN7S1423C23v85Ev
  virtual void  v86(); // _ZN7S1423C23v86Ev
  virtual void  v87(); // _ZN7S1423C23v87Ev
  S1423C2(); // tgen
};
//SIG(-1 S1423C2) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S1423C2 ::~S1423C2(){ note_dtor("S1423C2", this);}
void  S1423C2 ::v81(){vfunc_called(this, "_ZN7S1423C23v81Ev");}
void  S1423C2 ::v82(){vfunc_called(this, "_ZN7S1423C23v82Ev");}
void  S1423C2 ::v83(){vfunc_called(this, "_ZN7S1423C23v83Ev");}
void  S1423C2 ::v84(){vfunc_called(this, "_ZN7S1423C23v84Ev");}
void  S1423C2 ::v85(){vfunc_called(this, "_ZN7S1423C23v85Ev");}
void  S1423C2 ::v86(){vfunc_called(this, "_ZN7S1423C23v86Ev");}
void  S1423C2 ::v87(){vfunc_called(this, "_ZN7S1423C23v87Ev");}
S1423C2 ::S1423C2(){ note_ctor("S1423C2", this);} // tgen

static void Test_S1423C2()
{
  extern Class_Descriptor cd_S1423C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1423C2, buf);
    S1423C2 *dp, &lv = *(dp=new (buf) S1423C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1423C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1423C2)");
    check_base_class_offset(lv, (S1423C4*)(S1423C3*), 0, "S1423C2");
    check_base_class_offset(lv, (S1423C3*), 0, "S1423C2");
    set_bf_and_test(lv, s1423c2f0, ABISELECT(204,148), 0, 1, 1, "S1423C2");
    set_bf_and_test(lv, s1423c2f1, ABISELECT(204,148), 1, 1, 1, "S1423C2");
    set_bf_and_test(lv, s1423c2f2, ABISELECT(204,148), 2, 1, 1, "S1423C2");
    set_bf_and_test(lv, s1423c2f3, ABISELECT(204,148), 3, 1, 1, "S1423C2");
    check_field_offset(lv, s1423c2f4, ABISELECT(208,152), "S1423C2.s1423c2f4");
    check_field_offset(lv, s1423c2f5, ABISELECT(220,164), "S1423C2.s1423c2f5");
    check_field_offset(lv, s1423c2f6, ABISELECT(224,168), "S1423C2.s1423c2f6");
    check_field_offset(lv, s1423c2f7, ABISELECT(232,176), "S1423C2.s1423c2f7");
    check_field_offset(lv, s1423c2f8, ABISELECT(244,188), "S1423C2.s1423c2f8");
    test_class_info(&lv, &cd_S1423C2);
    dp->~S1423C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1423C2(Test_S1423C2, "S1423C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1423C2C1Ev();
extern void _ZN7S1423C2D1Ev();
Name_Map name_map_S1423C2[] = {
  NSPAIR(_ZN7S1423C2C1Ev),
  NSPAIR(_ZN7S1423C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1423C4;
extern VTBL_ENTRY _ZTI7S1423C4[];
extern  VTBL_ENTRY _ZTV7S1423C4[];
extern Class_Descriptor cd_S1423C3;
extern VTBL_ENTRY _ZTI7S1423C3[];
extern  VTBL_ENTRY _ZTV7S1423C3[];
static Base_Class bases_S1423C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1423C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1423C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1423C2[];
extern void _ZN7S1423C2D1Ev();
extern void _ZN7S1423C2D0Ev();
extern void _ZN7S1423C42v4Ev();
extern void _ZN7S1423C42v5Ev();
extern void _ZN7S1423C42v6Ev();
extern void _ZN7S1423C42v7Ev();
extern void _ZN7S1423C42v8Ev();
extern void _ZN7S1423C42v9Ev();
extern void _ZN7S1423C43v10Ev();
extern void _ZN7S1423C43v11Ev();
extern void _ZN7S1423C43v12Ev();
extern void _ZN7S1423C43v13Ev();
extern void _ZN7S1423C43v14Ev();
extern void _ZN7S1423C43v15Ev();
extern void _ZN7S1423C43v16Ev();
extern void _ZN7S1423C43v17Ev();
extern void _ZN7S1423C43v18Ev();
extern void _ZN7S1423C43v19Ev();
extern void _ZN7S1423C43v20Ev();
extern void _ZN7S1423C43v21Ev();
extern void _ZN7S1423C43v22Ev();
extern void _ZN7S1423C43v23Ev();
extern void _ZN7S1423C43v24Ev();
extern void _ZN7S1423C43v25Ev();
extern void _ZN7S1423C43v26Ev();
extern void _ZN7S1423C43v27Ev();
extern void _ZN7S1423C43v28Ev();
extern void _ZN7S1423C43v29Ev();
extern void _ZN7S1423C43v30Ev();
extern void _ZN7S1423C43v31Ev();
extern void _ZN7S1423C43v32Ev();
extern void _ZN7S1423C43v33Ev();
extern void _ZN7S1423C43v34Ev();
extern void _ZN7S1423C43v35Ev();
extern void _ZN7S1423C43v36Ev();
extern void _ZN7S1423C43v37Ev();
extern void _ZN7S1423C43v38Ev();
extern void _ZN7S1423C43v39Ev();
extern void _ZN7S1423C43v40Ev();
extern void _ZN7S1423C43v41Ev();
extern void _ZN7S1423C43v42Ev();
extern void _ZN7S1423C43v43Ev();
extern void _ZN7S1423C43v44Ev();
extern void _ZN7S1423C43v45Ev();
extern void _ZN7S1423C43v46Ev();
extern void _ZN7S1423C43v47Ev();
extern void _ZN7S1423C43v48Ev();
extern void _ZN7S1423C43v49Ev();
extern void _ZN7S1423C43v50Ev();
extern void _ZN7S1423C43v51Ev();
extern void _ZN7S1423C43v52Ev();
extern void _ZN7S1423C43v53Ev();
extern void _ZN7S1423C43v54Ev();
extern void _ZN7S1423C43v55Ev();
extern void _ZN7S1423C43v56Ev();
extern void _ZN7S1423C43v57Ev();
extern void _ZN7S1423C43v58Ev();
extern void _ZN7S1423C43v59Ev();
extern void _ZN7S1423C43v60Ev();
extern void _ZN7S1423C43v61Ev();
extern void _ZN7S1423C43v62Ev();
extern void _ZN7S1423C43v63Ev();
extern void _ZN7S1423C43v64Ev();
extern void _ZN7S1423C43v65Ev();
extern void _ZN7S1423C43v66Ev();
extern void _ZN7S1423C43v67Ev();
extern void _ZN7S1423C33v68Ev();
extern void _ZN7S1423C33v69Ev();
extern void _ZN7S1423C33v70Ev();
extern void _ZN7S1423C33v71Ev();
extern void _ZN7S1423C33v72Ev();
extern void _ZN7S1423C33v73Ev();
extern void _ZN7S1423C33v74Ev();
extern void _ZN7S1423C33v75Ev();
extern void _ZN7S1423C33v76Ev();
extern void _ZN7S1423C33v77Ev();
extern void _ZN7S1423C33v78Ev();
extern void _ZN7S1423C33v79Ev();
extern void _ZN7S1423C33v80Ev();
extern void _ZN7S1423C23v81Ev();
extern void _ZN7S1423C23v82Ev();
extern void _ZN7S1423C23v83Ev();
extern void _ZN7S1423C23v84Ev();
extern void _ZN7S1423C23v85Ev();
extern void _ZN7S1423C23v86Ev();
extern void _ZN7S1423C23v87Ev();
static  VTBL_ENTRY vtc_S1423C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1423C2[0]),
  (VTBL_ENTRY)&_ZN7S1423C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1423C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1423C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1423C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1423C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1423C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1423C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1423C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1423C23v87Ev,
};
extern VTBL_ENTRY _ZTI7S1423C2[];
extern  VTBL_ENTRY _ZTV7S1423C2[];
Class_Descriptor cd_S1423C2 = {  "S1423C2", // class name
  bases_S1423C2, 2,
  &(vtc_S1423C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1423C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1423C2),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1423C1  : S1423C2 {
  ::S664C12_nt s1423c1f0;
  int s1423c1f1[2];
  unsigned int s1423c1f2:1;
  virtual  ~S1423C1(); // _ZN7S1423C1D1Ev
  virtual void  v1(); // _ZN7S1423C12v1Ev
  virtual void  v2(); // _ZN7S1423C12v2Ev
  virtual void  v3(); // _ZN7S1423C12v3Ev
  S1423C1(); // tgen
};
//SIG(1 S1423C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 FC11 Fi[2] Fi:1}


 S1423C1 ::~S1423C1(){ note_dtor("S1423C1", this);}
void  S1423C1 ::v1(){vfunc_called(this, "_ZN7S1423C12v1Ev");}
void  S1423C1 ::v2(){vfunc_called(this, "_ZN7S1423C12v2Ev");}
void  S1423C1 ::v3(){vfunc_called(this, "_ZN7S1423C12v3Ev");}
S1423C1 ::S1423C1(){ note_ctor("S1423C1", this);} // tgen

static void Test_S1423C1()
{
  extern Class_Descriptor cd_S1423C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,56)];
    init_test(&cd_S1423C1, buf);
    S1423C1 *dp, &lv = *(dp=new (buf) S1423C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,220), "sizeof(S1423C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1423C1)");
    check_base_class_offset(lv, (S1423C4*)(S1423C3*)(S1423C2*), 0, "S1423C1");
    check_base_class_offset(lv, (S1423C3*)(S1423C2*), 0, "S1423C1");
    check_base_class_offset(lv, (S1423C2*), 0, "S1423C1");
    check_field_offset(lv, s1423c1f0, ABISELECT(252,196), "S1423C1.s1423c1f0");
    check_field_offset(lv, s1423c1f1, ABISELECT(264,208), "S1423C1.s1423c1f1");
    set_bf_and_test(lv, s1423c1f2, ABISELECT(272,216), 0, 1, 1, "S1423C1");
    test_class_info(&lv, &cd_S1423C1);
    dp->~S1423C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1423C1(Test_S1423C1, "S1423C1", ABISELECT(280,220));

#else // __cplusplus

extern void _ZN7S1423C1C1Ev();
extern void _ZN7S1423C1D1Ev();
Name_Map name_map_S1423C1[] = {
  NSPAIR(_ZN7S1423C1C1Ev),
  NSPAIR(_ZN7S1423C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1423C4;
extern VTBL_ENTRY _ZTI7S1423C4[];
extern  VTBL_ENTRY _ZTV7S1423C4[];
extern Class_Descriptor cd_S1423C3;
extern VTBL_ENTRY _ZTI7S1423C3[];
extern  VTBL_ENTRY _ZTV7S1423C3[];
extern Class_Descriptor cd_S1423C2;
extern VTBL_ENTRY _ZTI7S1423C2[];
extern  VTBL_ENTRY _ZTV7S1423C2[];
static Base_Class bases_S1423C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1423C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1423C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1423C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1423C1[];
extern void _ZN7S1423C1D1Ev();
extern void _ZN7S1423C1D0Ev();
extern void _ZN7S1423C42v4Ev();
extern void _ZN7S1423C42v5Ev();
extern void _ZN7S1423C42v6Ev();
extern void _ZN7S1423C42v7Ev();
extern void _ZN7S1423C42v8Ev();
extern void _ZN7S1423C42v9Ev();
extern void _ZN7S1423C43v10Ev();
extern void _ZN7S1423C43v11Ev();
extern void _ZN7S1423C43v12Ev();
extern void _ZN7S1423C43v13Ev();
extern void _ZN7S1423C43v14Ev();
extern void _ZN7S1423C43v15Ev();
extern void _ZN7S1423C43v16Ev();
extern void _ZN7S1423C43v17Ev();
extern void _ZN7S1423C43v18Ev();
extern void _ZN7S1423C43v19Ev();
extern void _ZN7S1423C43v20Ev();
extern void _ZN7S1423C43v21Ev();
extern void _ZN7S1423C43v22Ev();
extern void _ZN7S1423C43v23Ev();
extern void _ZN7S1423C43v24Ev();
extern void _ZN7S1423C43v25Ev();
extern void _ZN7S1423C43v26Ev();
extern void _ZN7S1423C43v27Ev();
extern void _ZN7S1423C43v28Ev();
extern void _ZN7S1423C43v29Ev();
extern void _ZN7S1423C43v30Ev();
extern void _ZN7S1423C43v31Ev();
extern void _ZN7S1423C43v32Ev();
extern void _ZN7S1423C43v33Ev();
extern void _ZN7S1423C43v34Ev();
extern void _ZN7S1423C43v35Ev();
extern void _ZN7S1423C43v36Ev();
extern void _ZN7S1423C43v37Ev();
extern void _ZN7S1423C43v38Ev();
extern void _ZN7S1423C43v39Ev();
extern void _ZN7S1423C43v40Ev();
extern void _ZN7S1423C43v41Ev();
extern void _ZN7S1423C43v42Ev();
extern void _ZN7S1423C43v43Ev();
extern void _ZN7S1423C43v44Ev();
extern void _ZN7S1423C43v45Ev();
extern void _ZN7S1423C43v46Ev();
extern void _ZN7S1423C43v47Ev();
extern void _ZN7S1423C43v48Ev();
extern void _ZN7S1423C43v49Ev();
extern void _ZN7S1423C43v50Ev();
extern void _ZN7S1423C43v51Ev();
extern void _ZN7S1423C43v52Ev();
extern void _ZN7S1423C43v53Ev();
extern void _ZN7S1423C43v54Ev();
extern void _ZN7S1423C43v55Ev();
extern void _ZN7S1423C43v56Ev();
extern void _ZN7S1423C43v57Ev();
extern void _ZN7S1423C43v58Ev();
extern void _ZN7S1423C43v59Ev();
extern void _ZN7S1423C43v60Ev();
extern void _ZN7S1423C43v61Ev();
extern void _ZN7S1423C43v62Ev();
extern void _ZN7S1423C43v63Ev();
extern void _ZN7S1423C43v64Ev();
extern void _ZN7S1423C43v65Ev();
extern void _ZN7S1423C43v66Ev();
extern void _ZN7S1423C43v67Ev();
extern void _ZN7S1423C33v68Ev();
extern void _ZN7S1423C33v69Ev();
extern void _ZN7S1423C33v70Ev();
extern void _ZN7S1423C33v71Ev();
extern void _ZN7S1423C33v72Ev();
extern void _ZN7S1423C33v73Ev();
extern void _ZN7S1423C33v74Ev();
extern void _ZN7S1423C33v75Ev();
extern void _ZN7S1423C33v76Ev();
extern void _ZN7S1423C33v77Ev();
extern void _ZN7S1423C33v78Ev();
extern void _ZN7S1423C33v79Ev();
extern void _ZN7S1423C33v80Ev();
extern void _ZN7S1423C23v81Ev();
extern void _ZN7S1423C23v82Ev();
extern void _ZN7S1423C23v83Ev();
extern void _ZN7S1423C23v84Ev();
extern void _ZN7S1423C23v85Ev();
extern void _ZN7S1423C23v86Ev();
extern void _ZN7S1423C23v87Ev();
extern void _ZN7S1423C12v1Ev();
extern void _ZN7S1423C12v2Ev();
extern void _ZN7S1423C12v3Ev();
static  VTBL_ENTRY vtc_S1423C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1423C1[0]),
  (VTBL_ENTRY)&_ZN7S1423C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1423C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1423C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1423C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1423C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1423C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1423C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1423C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1423C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1423C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1423C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1423C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1423C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1423C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1423C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1423C1[];
extern  VTBL_ENTRY _ZTV7S1423C1[];
Class_Descriptor cd_S1423C1 = {  "S1423C1", // class name
  bases_S1423C1, 3,
  &(vtc_S1423C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,220), // object size
  NSPAIRA(_ZTI7S1423C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1423C1),91, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1431C4  {
  int s1431c4f0;
  __tsi64 s1431c4f1;
  void *s1431c4f2[4];
  int s1431c4f3[2];
  void *s1431c4f4;
  ::S3432C14_nt s1431c4f5;
  void *s1431c4f6[2];
  virtual  ~S1431C4(); // _ZN7S1431C4D1Ev
  virtual void  v4(); // _ZN7S1431C42v4Ev
  virtual void  v5(); // _ZN7S1431C42v5Ev
  virtual void  v6(); // _ZN7S1431C42v6Ev
  virtual void  v7(); // _ZN7S1431C42v7Ev
  virtual void  v8(); // _ZN7S1431C42v8Ev
  virtual void  v9(); // _ZN7S1431C42v9Ev
  virtual void  v10(); // _ZN7S1431C43v10Ev
  virtual void  v11(); // _ZN7S1431C43v11Ev
  virtual void  v12(); // _ZN7S1431C43v12Ev
  virtual void  v13(); // _ZN7S1431C43v13Ev
  virtual void  v14(); // _ZN7S1431C43v14Ev
  virtual void  v15(); // _ZN7S1431C43v15Ev
  virtual void  v16(); // _ZN7S1431C43v16Ev
  virtual void  v17(); // _ZN7S1431C43v17Ev
  virtual void  v18(); // _ZN7S1431C43v18Ev
  virtual void  v19(); // _ZN7S1431C43v19Ev
  virtual void  v20(); // _ZN7S1431C43v20Ev
  virtual void  v21(); // _ZN7S1431C43v21Ev
  virtual void  v22(); // _ZN7S1431C43v22Ev
  virtual void  v23(); // _ZN7S1431C43v23Ev
  virtual void  v24(); // _ZN7S1431C43v24Ev
  virtual void  v25(); // _ZN7S1431C43v25Ev
  virtual void  v26(); // _ZN7S1431C43v26Ev
  virtual void  v27(); // _ZN7S1431C43v27Ev
  virtual void  v28(); // _ZN7S1431C43v28Ev
  virtual void  v29(); // _ZN7S1431C43v29Ev
  virtual void  v30(); // _ZN7S1431C43v30Ev
  virtual void  v31(); // _ZN7S1431C43v31Ev
  virtual void  v32(); // _ZN7S1431C43v32Ev
  virtual void  v33(); // _ZN7S1431C43v33Ev
  virtual void  v34(); // _ZN7S1431C43v34Ev
  virtual void  v35(); // _ZN7S1431C43v35Ev
  virtual void  v36(); // _ZN7S1431C43v36Ev
  virtual void  v37(); // _ZN7S1431C43v37Ev
  virtual void  v38(); // _ZN7S1431C43v38Ev
  virtual void  v39(); // _ZN7S1431C43v39Ev
  virtual void  v40(); // _ZN7S1431C43v40Ev
  virtual void  v41(); // _ZN7S1431C43v41Ev
  virtual void  v42(); // _ZN7S1431C43v42Ev
  virtual void  v43(); // _ZN7S1431C43v43Ev
  virtual void  v44(); // _ZN7S1431C43v44Ev
  virtual void  v45(); // _ZN7S1431C43v45Ev
  virtual void  v46(); // _ZN7S1431C43v46Ev
  virtual void  v47(); // _ZN7S1431C43v47Ev
  virtual void  v48(); // _ZN7S1431C43v48Ev
  virtual void  v49(); // _ZN7S1431C43v49Ev
  virtual void  v50(); // _ZN7S1431C43v50Ev
  virtual void  v51(); // _ZN7S1431C43v51Ev
  virtual void  v52(); // _ZN7S1431C43v52Ev
  virtual void  v53(); // _ZN7S1431C43v53Ev
  virtual void  v54(); // _ZN7S1431C43v54Ev
  virtual void  v55(); // _ZN7S1431C43v55Ev
  virtual void  v56(); // _ZN7S1431C43v56Ev
  virtual void  v57(); // _ZN7S1431C43v57Ev
  virtual void  v58(); // _ZN7S1431C43v58Ev
  virtual void  v59(); // _ZN7S1431C43v59Ev
  virtual void  v60(); // _ZN7S1431C43v60Ev
  virtual void  v61(); // _ZN7S1431C43v61Ev
  virtual void  v62(); // _ZN7S1431C43v62Ev
  virtual void  v63(); // _ZN7S1431C43v63Ev
  virtual void  v64(); // _ZN7S1431C43v64Ev
  virtual void  v65(); // _ZN7S1431C43v65Ev
  virtual void  v66(); // _ZN7S1431C43v66Ev
  virtual void  v67(); // _ZN7S1431C43v67Ev
  S1431C4(); // tgen
};
//SIG(-1 S1431C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1431C4 ::~S1431C4(){ note_dtor("S1431C4", this);}
void  S1431C4 ::v4(){vfunc_called(this, "_ZN7S1431C42v4Ev");}
void  S1431C4 ::v5(){vfunc_called(this, "_ZN7S1431C42v5Ev");}
void  S1431C4 ::v6(){vfunc_called(this, "_ZN7S1431C42v6Ev");}
void  S1431C4 ::v7(){vfunc_called(this, "_ZN7S1431C42v7Ev");}
void  S1431C4 ::v8(){vfunc_called(this, "_ZN7S1431C42v8Ev");}
void  S1431C4 ::v9(){vfunc_called(this, "_ZN7S1431C42v9Ev");}
void  S1431C4 ::v10(){vfunc_called(this, "_ZN7S1431C43v10Ev");}
void  S1431C4 ::v11(){vfunc_called(this, "_ZN7S1431C43v11Ev");}
void  S1431C4 ::v12(){vfunc_called(this, "_ZN7S1431C43v12Ev");}
void  S1431C4 ::v13(){vfunc_called(this, "_ZN7S1431C43v13Ev");}
void  S1431C4 ::v14(){vfunc_called(this, "_ZN7S1431C43v14Ev");}
void  S1431C4 ::v15(){vfunc_called(this, "_ZN7S1431C43v15Ev");}
void  S1431C4 ::v16(){vfunc_called(this, "_ZN7S1431C43v16Ev");}
void  S1431C4 ::v17(){vfunc_called(this, "_ZN7S1431C43v17Ev");}
void  S1431C4 ::v18(){vfunc_called(this, "_ZN7S1431C43v18Ev");}
void  S1431C4 ::v19(){vfunc_called(this, "_ZN7S1431C43v19Ev");}
void  S1431C4 ::v20(){vfunc_called(this, "_ZN7S1431C43v20Ev");}
void  S1431C4 ::v21(){vfunc_called(this, "_ZN7S1431C43v21Ev");}
void  S1431C4 ::v22(){vfunc_called(this, "_ZN7S1431C43v22Ev");}
void  S1431C4 ::v23(){vfunc_called(this, "_ZN7S1431C43v23Ev");}
void  S1431C4 ::v24(){vfunc_called(this, "_ZN7S1431C43v24Ev");}
void  S1431C4 ::v25(){vfunc_called(this, "_ZN7S1431C43v25Ev");}
void  S1431C4 ::v26(){vfunc_called(this, "_ZN7S1431C43v26Ev");}
void  S1431C4 ::v27(){vfunc_called(this, "_ZN7S1431C43v27Ev");}
void  S1431C4 ::v28(){vfunc_called(this, "_ZN7S1431C43v28Ev");}
void  S1431C4 ::v29(){vfunc_called(this, "_ZN7S1431C43v29Ev");}
void  S1431C4 ::v30(){vfunc_called(this, "_ZN7S1431C43v30Ev");}
void  S1431C4 ::v31(){vfunc_called(this, "_ZN7S1431C43v31Ev");}
void  S1431C4 ::v32(){vfunc_called(this, "_ZN7S1431C43v32Ev");}
void  S1431C4 ::v33(){vfunc_called(this, "_ZN7S1431C43v33Ev");}
void  S1431C4 ::v34(){vfunc_called(this, "_ZN7S1431C43v34Ev");}
void  S1431C4 ::v35(){vfunc_called(this, "_ZN7S1431C43v35Ev");}
void  S1431C4 ::v36(){vfunc_called(this, "_ZN7S1431C43v36Ev");}
void  S1431C4 ::v37(){vfunc_called(this, "_ZN7S1431C43v37Ev");}
void  S1431C4 ::v38(){vfunc_called(this, "_ZN7S1431C43v38Ev");}
void  S1431C4 ::v39(){vfunc_called(this, "_ZN7S1431C43v39Ev");}
void  S1431C4 ::v40(){vfunc_called(this, "_ZN7S1431C43v40Ev");}
void  S1431C4 ::v41(){vfunc_called(this, "_ZN7S1431C43v41Ev");}
void  S1431C4 ::v42(){vfunc_called(this, "_ZN7S1431C43v42Ev");}
void  S1431C4 ::v43(){vfunc_called(this, "_ZN7S1431C43v43Ev");}
void  S1431C4 ::v44(){vfunc_called(this, "_ZN7S1431C43v44Ev");}
void  S1431C4 ::v45(){vfunc_called(this, "_ZN7S1431C43v45Ev");}
void  S1431C4 ::v46(){vfunc_called(this, "_ZN7S1431C43v46Ev");}
void  S1431C4 ::v47(){vfunc_called(this, "_ZN7S1431C43v47Ev");}
void  S1431C4 ::v48(){vfunc_called(this, "_ZN7S1431C43v48Ev");}
void  S1431C4 ::v49(){vfunc_called(this, "_ZN7S1431C43v49Ev");}
void  S1431C4 ::v50(){vfunc_called(this, "_ZN7S1431C43v50Ev");}
void  S1431C4 ::v51(){vfunc_called(this, "_ZN7S1431C43v51Ev");}
void  S1431C4 ::v52(){vfunc_called(this, "_ZN7S1431C43v52Ev");}
void  S1431C4 ::v53(){vfunc_called(this, "_ZN7S1431C43v53Ev");}
void  S1431C4 ::v54(){vfunc_called(this, "_ZN7S1431C43v54Ev");}
void  S1431C4 ::v55(){vfunc_called(this, "_ZN7S1431C43v55Ev");}
void  S1431C4 ::v56(){vfunc_called(this, "_ZN7S1431C43v56Ev");}
void  S1431C4 ::v57(){vfunc_called(this, "_ZN7S1431C43v57Ev");}
void  S1431C4 ::v58(){vfunc_called(this, "_ZN7S1431C43v58Ev");}
void  S1431C4 ::v59(){vfunc_called(this, "_ZN7S1431C43v59Ev");}
void  S1431C4 ::v60(){vfunc_called(this, "_ZN7S1431C43v60Ev");}
void  S1431C4 ::v61(){vfunc_called(this, "_ZN7S1431C43v61Ev");}
void  S1431C4 ::v62(){vfunc_called(this, "_ZN7S1431C43v62Ev");}
void  S1431C4 ::v63(){vfunc_called(this, "_ZN7S1431C43v63Ev");}
void  S1431C4 ::v64(){vfunc_called(this, "_ZN7S1431C43v64Ev");}
void  S1431C4 ::v65(){vfunc_called(this, "_ZN7S1431C43v65Ev");}
void  S1431C4 ::v66(){vfunc_called(this, "_ZN7S1431C43v66Ev");}
void  S1431C4 ::v67(){vfunc_called(this, "_ZN7S1431C43v67Ev");}
S1431C4 ::S1431C4(){ note_ctor("S1431C4", this);} // tgen

static void Test_S1431C4()
{
  extern Class_Descriptor cd_S1431C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1431C4, buf);
    S1431C4 *dp, &lv = *(dp=new (buf) S1431C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1431C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1431C4)");
    check_field_offset(lv, s1431c4f0, ABISELECT(8,4), "S1431C4.s1431c4f0");
    check_field_offset(lv, s1431c4f1, ABISELECT(16,8), "S1431C4.s1431c4f1");
    check_field_offset(lv, s1431c4f2, ABISELECT(24,16), "S1431C4.s1431c4f2");
    check_field_offset(lv, s1431c4f3, ABISELECT(56,32), "S1431C4.s1431c4f3");
    check_field_offset(lv, s1431c4f4, ABISELECT(64,40), "S1431C4.s1431c4f4");
    check_field_offset(lv, s1431c4f5, ABISELECT(72,44), "S1431C4.s1431c4f5");
    check_field_offset(lv, s1431c4f6, ABISELECT(80,52), "S1431C4.s1431c4f6");
    test_class_info(&lv, &cd_S1431C4);
    dp->~S1431C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1431C4(Test_S1431C4, "S1431C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1431C4C1Ev();
extern void _ZN7S1431C4D1Ev();
Name_Map name_map_S1431C4[] = {
  NSPAIR(_ZN7S1431C4C1Ev),
  NSPAIR(_ZN7S1431C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1431C4[];
extern void _ZN7S1431C4D1Ev();
extern void _ZN7S1431C4D0Ev();
extern void _ZN7S1431C42v4Ev();
extern void _ZN7S1431C42v5Ev();
extern void _ZN7S1431C42v6Ev();
extern void _ZN7S1431C42v7Ev();
extern void _ZN7S1431C42v8Ev();
extern void _ZN7S1431C42v9Ev();
extern void _ZN7S1431C43v10Ev();
extern void _ZN7S1431C43v11Ev();
extern void _ZN7S1431C43v12Ev();
extern void _ZN7S1431C43v13Ev();
extern void _ZN7S1431C43v14Ev();
extern void _ZN7S1431C43v15Ev();
extern void _ZN7S1431C43v16Ev();
extern void _ZN7S1431C43v17Ev();
extern void _ZN7S1431C43v18Ev();
extern void _ZN7S1431C43v19Ev();
extern void _ZN7S1431C43v20Ev();
extern void _ZN7S1431C43v21Ev();
extern void _ZN7S1431C43v22Ev();
extern void _ZN7S1431C43v23Ev();
extern void _ZN7S1431C43v24Ev();
extern void _ZN7S1431C43v25Ev();
extern void _ZN7S1431C43v26Ev();
extern void _ZN7S1431C43v27Ev();
extern void _ZN7S1431C43v28Ev();
extern void _ZN7S1431C43v29Ev();
extern void _ZN7S1431C43v30Ev();
extern void _ZN7S1431C43v31Ev();
extern void _ZN7S1431C43v32Ev();
extern void _ZN7S1431C43v33Ev();
extern void _ZN7S1431C43v34Ev();
extern void _ZN7S1431C43v35Ev();
extern void _ZN7S1431C43v36Ev();
extern void _ZN7S1431C43v37Ev();
extern void _ZN7S1431C43v38Ev();
extern void _ZN7S1431C43v39Ev();
extern void _ZN7S1431C43v40Ev();
extern void _ZN7S1431C43v41Ev();
extern void _ZN7S1431C43v42Ev();
extern void _ZN7S1431C43v43Ev();
extern void _ZN7S1431C43v44Ev();
extern void _ZN7S1431C43v45Ev();
extern void _ZN7S1431C43v46Ev();
extern void _ZN7S1431C43v47Ev();
extern void _ZN7S1431C43v48Ev();
extern void _ZN7S1431C43v49Ev();
extern void _ZN7S1431C43v50Ev();
extern void _ZN7S1431C43v51Ev();
extern void _ZN7S1431C43v52Ev();
extern void _ZN7S1431C43v53Ev();
extern void _ZN7S1431C43v54Ev();
extern void _ZN7S1431C43v55Ev();
extern void _ZN7S1431C43v56Ev();
extern void _ZN7S1431C43v57Ev();
extern void _ZN7S1431C43v58Ev();
extern void _ZN7S1431C43v59Ev();
extern void _ZN7S1431C43v60Ev();
extern void _ZN7S1431C43v61Ev();
extern void _ZN7S1431C43v62Ev();
extern void _ZN7S1431C43v63Ev();
extern void _ZN7S1431C43v64Ev();
extern void _ZN7S1431C43v65Ev();
extern void _ZN7S1431C43v66Ev();
extern void _ZN7S1431C43v67Ev();
static  VTBL_ENTRY vtc_S1431C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1431C4[0]),
  (VTBL_ENTRY)&_ZN7S1431C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1431C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v67Ev,
};
extern VTBL_ENTRY _ZTI7S1431C4[];
extern  VTBL_ENTRY _ZTV7S1431C4[];
Class_Descriptor cd_S1431C4 = {  "S1431C4", // class name
  0,0,//no base classes
  &(vtc_S1431C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1431C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1431C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1431C3  : S1431C4 {
  void *s1431c3f0;
  ::S3432C14_nt s1431c3f1;
  int s1431c3f2[5];
  unsigned int s1431c3f3:1;
  unsigned int s1431c3f4:1;
  unsigned int s1431c3f5:1;
  unsigned int s1431c3f6:1;
  unsigned int s1431c3f7:1;
  ::S273C21 s1431c3f8;
  ::S273C17 s1431c3f9;
  unsigned int s1431c3f10:1;
  int s1431c3f11[2];
  void *s1431c3f12;
  int s1431c3f13[3];
  virtual  ~S1431C3(); // _ZN7S1431C3D1Ev
  virtual void  v68(); // _ZN7S1431C33v68Ev
  virtual void  v69(); // _ZN7S1431C33v69Ev
  virtual void  v70(); // _ZN7S1431C33v70Ev
  virtual void  v71(); // _ZN7S1431C33v71Ev
  virtual void  v72(); // _ZN7S1431C33v72Ev
  virtual void  v73(); // _ZN7S1431C33v73Ev
  virtual void  v74(); // _ZN7S1431C33v74Ev
  virtual void  v75(); // _ZN7S1431C33v75Ev
  virtual void  v76(); // _ZN7S1431C33v76Ev
  virtual void  v77(); // _ZN7S1431C33v77Ev
  virtual void  v78(); // _ZN7S1431C33v78Ev
  virtual void  v79(); // _ZN7S1431C33v79Ev
  virtual void  v80(); // _ZN7S1431C33v80Ev
  S1431C3(); // tgen
};
//SIG(-1 S1431C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1431C3 ::~S1431C3(){ note_dtor("S1431C3", this);}
void  S1431C3 ::v68(){vfunc_called(this, "_ZN7S1431C33v68Ev");}
void  S1431C3 ::v69(){vfunc_called(this, "_ZN7S1431C33v69Ev");}
void  S1431C3 ::v70(){vfunc_called(this, "_ZN7S1431C33v70Ev");}
void  S1431C3 ::v71(){vfunc_called(this, "_ZN7S1431C33v71Ev");}
void  S1431C3 ::v72(){vfunc_called(this, "_ZN7S1431C33v72Ev");}
void  S1431C3 ::v73(){vfunc_called(this, "_ZN7S1431C33v73Ev");}
void  S1431C3 ::v74(){vfunc_called(this, "_ZN7S1431C33v74Ev");}
void  S1431C3 ::v75(){vfunc_called(this, "_ZN7S1431C33v75Ev");}
void  S1431C3 ::v76(){vfunc_called(this, "_ZN7S1431C33v76Ev");}
void  S1431C3 ::v77(){vfunc_called(this, "_ZN7S1431C33v77Ev");}
void  S1431C3 ::v78(){vfunc_called(this, "_ZN7S1431C33v78Ev");}
void  S1431C3 ::v79(){vfunc_called(this, "_ZN7S1431C33v79Ev");}
void  S1431C3 ::v80(){vfunc_called(this, "_ZN7S1431C33v80Ev");}
S1431C3 ::S1431C3(){ note_ctor("S1431C3", this);} // tgen

static void Test_S1431C3()
{
  extern Class_Descriptor cd_S1431C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1431C3, buf);
    S1431C3 *dp, &lv = *(dp=new (buf) S1431C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1431C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1431C3)");
    check_base_class_offset(lv, (S1431C4*), 0, "S1431C3");
    check_field_offset(lv, s1431c3f0, ABISELECT(96,60), "S1431C3.s1431c3f0");
    check_field_offset(lv, s1431c3f1, ABISELECT(104,64), "S1431C3.s1431c3f1");
    check_field_offset(lv, s1431c3f2, ABISELECT(112,72), "S1431C3.s1431c3f2");
    set_bf_and_test(lv, s1431c3f3, ABISELECT(132,92), 0, 1, 1, "S1431C3");
    set_bf_and_test(lv, s1431c3f4, ABISELECT(132,92), 1, 1, 1, "S1431C3");
    set_bf_and_test(lv, s1431c3f5, ABISELECT(132,92), 2, 1, 1, "S1431C3");
    set_bf_and_test(lv, s1431c3f6, ABISELECT(132,92), 3, 1, 1, "S1431C3");
    set_bf_and_test(lv, s1431c3f7, ABISELECT(132,92), 4, 1, 1, "S1431C3");
    check_field_offset(lv, s1431c3f8, ABISELECT(136,96), "S1431C3.s1431c3f8");
    check_field_offset(lv, s1431c3f9, ABISELECT(152,108), "S1431C3.s1431c3f9");
    set_bf_and_test(lv, s1431c3f10, ABISELECT(168,120), 0, 1, 1, "S1431C3");
    check_field_offset(lv, s1431c3f11, ABISELECT(172,124), "S1431C3.s1431c3f11");
    check_field_offset(lv, s1431c3f12, ABISELECT(184,132), "S1431C3.s1431c3f12");
    check_field_offset(lv, s1431c3f13, ABISELECT(192,136), "S1431C3.s1431c3f13");
    test_class_info(&lv, &cd_S1431C3);
    dp->~S1431C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1431C3(Test_S1431C3, "S1431C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1431C3C1Ev();
extern void _ZN7S1431C3D1Ev();
Name_Map name_map_S1431C3[] = {
  NSPAIR(_ZN7S1431C3C1Ev),
  NSPAIR(_ZN7S1431C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1431C4;
extern VTBL_ENTRY _ZTI7S1431C4[];
extern  VTBL_ENTRY _ZTV7S1431C4[];
static Base_Class bases_S1431C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1431C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1431C3[];
extern void _ZN7S1431C3D1Ev();
extern void _ZN7S1431C3D0Ev();
extern void _ZN7S1431C42v4Ev();
extern void _ZN7S1431C42v5Ev();
extern void _ZN7S1431C42v6Ev();
extern void _ZN7S1431C42v7Ev();
extern void _ZN7S1431C42v8Ev();
extern void _ZN7S1431C42v9Ev();
extern void _ZN7S1431C43v10Ev();
extern void _ZN7S1431C43v11Ev();
extern void _ZN7S1431C43v12Ev();
extern void _ZN7S1431C43v13Ev();
extern void _ZN7S1431C43v14Ev();
extern void _ZN7S1431C43v15Ev();
extern void _ZN7S1431C43v16Ev();
extern void _ZN7S1431C43v17Ev();
extern void _ZN7S1431C43v18Ev();
extern void _ZN7S1431C43v19Ev();
extern void _ZN7S1431C43v20Ev();
extern void _ZN7S1431C43v21Ev();
extern void _ZN7S1431C43v22Ev();
extern void _ZN7S1431C43v23Ev();
extern void _ZN7S1431C43v24Ev();
extern void _ZN7S1431C43v25Ev();
extern void _ZN7S1431C43v26Ev();
extern void _ZN7S1431C43v27Ev();
extern void _ZN7S1431C43v28Ev();
extern void _ZN7S1431C43v29Ev();
extern void _ZN7S1431C43v30Ev();
extern void _ZN7S1431C43v31Ev();
extern void _ZN7S1431C43v32Ev();
extern void _ZN7S1431C43v33Ev();
extern void _ZN7S1431C43v34Ev();
extern void _ZN7S1431C43v35Ev();
extern void _ZN7S1431C43v36Ev();
extern void _ZN7S1431C43v37Ev();
extern void _ZN7S1431C43v38Ev();
extern void _ZN7S1431C43v39Ev();
extern void _ZN7S1431C43v40Ev();
extern void _ZN7S1431C43v41Ev();
extern void _ZN7S1431C43v42Ev();
extern void _ZN7S1431C43v43Ev();
extern void _ZN7S1431C43v44Ev();
extern void _ZN7S1431C43v45Ev();
extern void _ZN7S1431C43v46Ev();
extern void _ZN7S1431C43v47Ev();
extern void _ZN7S1431C43v48Ev();
extern void _ZN7S1431C43v49Ev();
extern void _ZN7S1431C43v50Ev();
extern void _ZN7S1431C43v51Ev();
extern void _ZN7S1431C43v52Ev();
extern void _ZN7S1431C43v53Ev();
extern void _ZN7S1431C43v54Ev();
extern void _ZN7S1431C43v55Ev();
extern void _ZN7S1431C43v56Ev();
extern void _ZN7S1431C43v57Ev();
extern void _ZN7S1431C43v58Ev();
extern void _ZN7S1431C43v59Ev();
extern void _ZN7S1431C43v60Ev();
extern void _ZN7S1431C43v61Ev();
extern void _ZN7S1431C43v62Ev();
extern void _ZN7S1431C43v63Ev();
extern void _ZN7S1431C43v64Ev();
extern void _ZN7S1431C43v65Ev();
extern void _ZN7S1431C43v66Ev();
extern void _ZN7S1431C43v67Ev();
extern void _ZN7S1431C33v68Ev();
extern void _ZN7S1431C33v69Ev();
extern void _ZN7S1431C33v70Ev();
extern void _ZN7S1431C33v71Ev();
extern void _ZN7S1431C33v72Ev();
extern void _ZN7S1431C33v73Ev();
extern void _ZN7S1431C33v74Ev();
extern void _ZN7S1431C33v75Ev();
extern void _ZN7S1431C33v76Ev();
extern void _ZN7S1431C33v77Ev();
extern void _ZN7S1431C33v78Ev();
extern void _ZN7S1431C33v79Ev();
extern void _ZN7S1431C33v80Ev();
static  VTBL_ENTRY vtc_S1431C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1431C3[0]),
  (VTBL_ENTRY)&_ZN7S1431C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1431C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S1431C3[];
extern  VTBL_ENTRY _ZTV7S1431C3[];
Class_Descriptor cd_S1431C3 = {  "S1431C3", // class name
  bases_S1431C3, 1,
  &(vtc_S1431C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1431C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1431C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1431C2  : S1431C3 {
  unsigned int s1431c2f0:1;
  unsigned int s1431c2f1:1;
  unsigned int s1431c2f2:1;
  unsigned int s1431c2f3:1;
  ::S664C12_nt s1431c2f4;
  char s1431c2f5[2];
  ::S3432C14_nt s1431c2f6;
  ::S632C13 s1431c2f7;
  ::S3432C14_nt s1431c2f8;
  virtual  ~S1431C2(); // _ZN7S1431C2D1Ev
  virtual void  v81(); // _ZN7S1431C23v81Ev
  virtual void  v82(); // _ZN7S1431C23v82Ev
  virtual void  v83(); // _ZN7S1431C23v83Ev
  virtual void  v84(); // _ZN7S1431C23v84Ev
  virtual void  v85(); // _ZN7S1431C23v85Ev
  virtual void  v86(); // _ZN7S1431C23v86Ev
  virtual void  v87(); // _ZN7S1431C23v87Ev
  S1431C2(); // tgen
};
//SIG(-1 S1431C2) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S1431C2 ::~S1431C2(){ note_dtor("S1431C2", this);}
void  S1431C2 ::v81(){vfunc_called(this, "_ZN7S1431C23v81Ev");}
void  S1431C2 ::v82(){vfunc_called(this, "_ZN7S1431C23v82Ev");}
void  S1431C2 ::v83(){vfunc_called(this, "_ZN7S1431C23v83Ev");}
void  S1431C2 ::v84(){vfunc_called(this, "_ZN7S1431C23v84Ev");}
void  S1431C2 ::v85(){vfunc_called(this, "_ZN7S1431C23v85Ev");}
void  S1431C2 ::v86(){vfunc_called(this, "_ZN7S1431C23v86Ev");}
void  S1431C2 ::v87(){vfunc_called(this, "_ZN7S1431C23v87Ev");}
S1431C2 ::S1431C2(){ note_ctor("S1431C2", this);} // tgen

static void Test_S1431C2()
{
  extern Class_Descriptor cd_S1431C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1431C2, buf);
    S1431C2 *dp, &lv = *(dp=new (buf) S1431C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1431C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1431C2)");
    check_base_class_offset(lv, (S1431C4*)(S1431C3*), 0, "S1431C2");
    check_base_class_offset(lv, (S1431C3*), 0, "S1431C2");
    set_bf_and_test(lv, s1431c2f0, ABISELECT(204,148), 0, 1, 1, "S1431C2");
    set_bf_and_test(lv, s1431c2f1, ABISELECT(204,148), 1, 1, 1, "S1431C2");
    set_bf_and_test(lv, s1431c2f2, ABISELECT(204,148), 2, 1, 1, "S1431C2");
    set_bf_and_test(lv, s1431c2f3, ABISELECT(204,148), 3, 1, 1, "S1431C2");
    check_field_offset(lv, s1431c2f4, ABISELECT(208,152), "S1431C2.s1431c2f4");
    check_field_offset(lv, s1431c2f5, ABISELECT(220,164), "S1431C2.s1431c2f5");
    check_field_offset(lv, s1431c2f6, ABISELECT(224,168), "S1431C2.s1431c2f6");
    check_field_offset(lv, s1431c2f7, ABISELECT(232,176), "S1431C2.s1431c2f7");
    check_field_offset(lv, s1431c2f8, ABISELECT(244,188), "S1431C2.s1431c2f8");
    test_class_info(&lv, &cd_S1431C2);
    dp->~S1431C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1431C2(Test_S1431C2, "S1431C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1431C2C1Ev();
extern void _ZN7S1431C2D1Ev();
Name_Map name_map_S1431C2[] = {
  NSPAIR(_ZN7S1431C2C1Ev),
  NSPAIR(_ZN7S1431C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1431C4;
extern VTBL_ENTRY _ZTI7S1431C4[];
extern  VTBL_ENTRY _ZTV7S1431C4[];
extern Class_Descriptor cd_S1431C3;
extern VTBL_ENTRY _ZTI7S1431C3[];
extern  VTBL_ENTRY _ZTV7S1431C3[];
static Base_Class bases_S1431C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1431C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1431C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1431C2[];
extern void _ZN7S1431C2D1Ev();
extern void _ZN7S1431C2D0Ev();
extern void _ZN7S1431C42v4Ev();
extern void _ZN7S1431C42v5Ev();
extern void _ZN7S1431C42v6Ev();
extern void _ZN7S1431C42v7Ev();
extern void _ZN7S1431C42v8Ev();
extern void _ZN7S1431C42v9Ev();
extern void _ZN7S1431C43v10Ev();
extern void _ZN7S1431C43v11Ev();
extern void _ZN7S1431C43v12Ev();
extern void _ZN7S1431C43v13Ev();
extern void _ZN7S1431C43v14Ev();
extern void _ZN7S1431C43v15Ev();
extern void _ZN7S1431C43v16Ev();
extern void _ZN7S1431C43v17Ev();
extern void _ZN7S1431C43v18Ev();
extern void _ZN7S1431C43v19Ev();
extern void _ZN7S1431C43v20Ev();
extern void _ZN7S1431C43v21Ev();
extern void _ZN7S1431C43v22Ev();
extern void _ZN7S1431C43v23Ev();
extern void _ZN7S1431C43v24Ev();
extern void _ZN7S1431C43v25Ev();
extern void _ZN7S1431C43v26Ev();
extern void _ZN7S1431C43v27Ev();
extern void _ZN7S1431C43v28Ev();
extern void _ZN7S1431C43v29Ev();
extern void _ZN7S1431C43v30Ev();
extern void _ZN7S1431C43v31Ev();
extern void _ZN7S1431C43v32Ev();
extern void _ZN7S1431C43v33Ev();
extern void _ZN7S1431C43v34Ev();
extern void _ZN7S1431C43v35Ev();
extern void _ZN7S1431C43v36Ev();
extern void _ZN7S1431C43v37Ev();
extern void _ZN7S1431C43v38Ev();
extern void _ZN7S1431C43v39Ev();
extern void _ZN7S1431C43v40Ev();
extern void _ZN7S1431C43v41Ev();
extern void _ZN7S1431C43v42Ev();
extern void _ZN7S1431C43v43Ev();
extern void _ZN7S1431C43v44Ev();
extern void _ZN7S1431C43v45Ev();
extern void _ZN7S1431C43v46Ev();
extern void _ZN7S1431C43v47Ev();
extern void _ZN7S1431C43v48Ev();
extern void _ZN7S1431C43v49Ev();
extern void _ZN7S1431C43v50Ev();
extern void _ZN7S1431C43v51Ev();
extern void _ZN7S1431C43v52Ev();
extern void _ZN7S1431C43v53Ev();
extern void _ZN7S1431C43v54Ev();
extern void _ZN7S1431C43v55Ev();
extern void _ZN7S1431C43v56Ev();
extern void _ZN7S1431C43v57Ev();
extern void _ZN7S1431C43v58Ev();
extern void _ZN7S1431C43v59Ev();
extern void _ZN7S1431C43v60Ev();
extern void _ZN7S1431C43v61Ev();
extern void _ZN7S1431C43v62Ev();
extern void _ZN7S1431C43v63Ev();
extern void _ZN7S1431C43v64Ev();
extern void _ZN7S1431C43v65Ev();
extern void _ZN7S1431C43v66Ev();
extern void _ZN7S1431C43v67Ev();
extern void _ZN7S1431C33v68Ev();
extern void _ZN7S1431C33v69Ev();
extern void _ZN7S1431C33v70Ev();
extern void _ZN7S1431C33v71Ev();
extern void _ZN7S1431C33v72Ev();
extern void _ZN7S1431C33v73Ev();
extern void _ZN7S1431C33v74Ev();
extern void _ZN7S1431C33v75Ev();
extern void _ZN7S1431C33v76Ev();
extern void _ZN7S1431C33v77Ev();
extern void _ZN7S1431C33v78Ev();
extern void _ZN7S1431C33v79Ev();
extern void _ZN7S1431C33v80Ev();
extern void _ZN7S1431C23v81Ev();
extern void _ZN7S1431C23v82Ev();
extern void _ZN7S1431C23v83Ev();
extern void _ZN7S1431C23v84Ev();
extern void _ZN7S1431C23v85Ev();
extern void _ZN7S1431C23v86Ev();
extern void _ZN7S1431C23v87Ev();
static  VTBL_ENTRY vtc_S1431C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1431C2[0]),
  (VTBL_ENTRY)&_ZN7S1431C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1431C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1431C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1431C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1431C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1431C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1431C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1431C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1431C23v87Ev,
};
extern VTBL_ENTRY _ZTI7S1431C2[];
extern  VTBL_ENTRY _ZTV7S1431C2[];
Class_Descriptor cd_S1431C2 = {  "S1431C2", // class name
  bases_S1431C2, 2,
  &(vtc_S1431C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1431C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1431C2),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1431C1  : S1431C2 {
  int s1431c1f0[4];
  ::S3432C14_nt s1431c1f1;
  ::S3432C14_nt s1431c1f2;
  virtual  ~S1431C1(); // _ZN7S1431C1D1Ev
  virtual void  v1(); // _ZN7S1431C12v1Ev
  virtual void  v2(); // _ZN7S1431C12v2Ev
  virtual void  v3(); // _ZN7S1431C12v3Ev
  S1431C1(); // tgen
};
//SIG(1 S1431C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 Fi[4] FC5 FC5}


 S1431C1 ::~S1431C1(){ note_dtor("S1431C1", this);}
void  S1431C1 ::v1(){vfunc_called(this, "_ZN7S1431C12v1Ev");}
void  S1431C1 ::v2(){vfunc_called(this, "_ZN7S1431C12v2Ev");}
void  S1431C1 ::v3(){vfunc_called(this, "_ZN7S1431C12v3Ev");}
S1431C1 ::S1431C1(){ note_ctor("S1431C1", this);} // tgen

static void Test_S1431C1()
{
  extern Class_Descriptor cd_S1431C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,58)];
    init_test(&cd_S1431C1, buf);
    S1431C1 *dp, &lv = *(dp=new (buf) S1431C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,228), "sizeof(S1431C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1431C1)");
    check_base_class_offset(lv, (S1431C4*)(S1431C3*)(S1431C2*), 0, "S1431C1");
    check_base_class_offset(lv, (S1431C3*)(S1431C2*), 0, "S1431C1");
    check_base_class_offset(lv, (S1431C2*), 0, "S1431C1");
    check_field_offset(lv, s1431c1f0, ABISELECT(252,196), "S1431C1.s1431c1f0");
    check_field_offset(lv, s1431c1f1, ABISELECT(268,212), "S1431C1.s1431c1f1");
    check_field_offset(lv, s1431c1f2, ABISELECT(276,220), "S1431C1.s1431c1f2");
    test_class_info(&lv, &cd_S1431C1);
    dp->~S1431C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1431C1(Test_S1431C1, "S1431C1", ABISELECT(288,228));

#else // __cplusplus

extern void _ZN7S1431C1C1Ev();
extern void _ZN7S1431C1D1Ev();
Name_Map name_map_S1431C1[] = {
  NSPAIR(_ZN7S1431C1C1Ev),
  NSPAIR(_ZN7S1431C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1431C4;
extern VTBL_ENTRY _ZTI7S1431C4[];
extern  VTBL_ENTRY _ZTV7S1431C4[];
extern Class_Descriptor cd_S1431C3;
extern VTBL_ENTRY _ZTI7S1431C3[];
extern  VTBL_ENTRY _ZTV7S1431C3[];
extern Class_Descriptor cd_S1431C2;
extern VTBL_ENTRY _ZTI7S1431C2[];
extern  VTBL_ENTRY _ZTV7S1431C2[];
static Base_Class bases_S1431C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1431C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1431C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1431C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1431C1[];
extern void _ZN7S1431C1D1Ev();
extern void _ZN7S1431C1D0Ev();
extern void _ZN7S1431C42v4Ev();
extern void _ZN7S1431C42v5Ev();
extern void _ZN7S1431C42v6Ev();
extern void _ZN7S1431C42v7Ev();
extern void _ZN7S1431C42v8Ev();
extern void _ZN7S1431C42v9Ev();
extern void _ZN7S1431C43v10Ev();
extern void _ZN7S1431C43v11Ev();
extern void _ZN7S1431C43v12Ev();
extern void _ZN7S1431C43v13Ev();
extern void _ZN7S1431C43v14Ev();
extern void _ZN7S1431C43v15Ev();
extern void _ZN7S1431C43v16Ev();
extern void _ZN7S1431C43v17Ev();
extern void _ZN7S1431C43v18Ev();
extern void _ZN7S1431C43v19Ev();
extern void _ZN7S1431C43v20Ev();
extern void _ZN7S1431C43v21Ev();
extern void _ZN7S1431C43v22Ev();
extern void _ZN7S1431C43v23Ev();
extern void _ZN7S1431C43v24Ev();
extern void _ZN7S1431C43v25Ev();
extern void _ZN7S1431C43v26Ev();
extern void _ZN7S1431C43v27Ev();
extern void _ZN7S1431C43v28Ev();
extern void _ZN7S1431C43v29Ev();
extern void _ZN7S1431C43v30Ev();
extern void _ZN7S1431C43v31Ev();
extern void _ZN7S1431C43v32Ev();
extern void _ZN7S1431C43v33Ev();
extern void _ZN7S1431C43v34Ev();
extern void _ZN7S1431C43v35Ev();
extern void _ZN7S1431C43v36Ev();
extern void _ZN7S1431C43v37Ev();
extern void _ZN7S1431C43v38Ev();
extern void _ZN7S1431C43v39Ev();
extern void _ZN7S1431C43v40Ev();
extern void _ZN7S1431C43v41Ev();
extern void _ZN7S1431C43v42Ev();
extern void _ZN7S1431C43v43Ev();
extern void _ZN7S1431C43v44Ev();
extern void _ZN7S1431C43v45Ev();
extern void _ZN7S1431C43v46Ev();
extern void _ZN7S1431C43v47Ev();
extern void _ZN7S1431C43v48Ev();
extern void _ZN7S1431C43v49Ev();
extern void _ZN7S1431C43v50Ev();
extern void _ZN7S1431C43v51Ev();
extern void _ZN7S1431C43v52Ev();
extern void _ZN7S1431C43v53Ev();
extern void _ZN7S1431C43v54Ev();
extern void _ZN7S1431C43v55Ev();
extern void _ZN7S1431C43v56Ev();
extern void _ZN7S1431C43v57Ev();
extern void _ZN7S1431C43v58Ev();
extern void _ZN7S1431C43v59Ev();
extern void _ZN7S1431C43v60Ev();
extern void _ZN7S1431C43v61Ev();
extern void _ZN7S1431C43v62Ev();
extern void _ZN7S1431C43v63Ev();
extern void _ZN7S1431C43v64Ev();
extern void _ZN7S1431C43v65Ev();
extern void _ZN7S1431C43v66Ev();
extern void _ZN7S1431C43v67Ev();
extern void _ZN7S1431C33v68Ev();
extern void _ZN7S1431C33v69Ev();
extern void _ZN7S1431C33v70Ev();
extern void _ZN7S1431C33v71Ev();
extern void _ZN7S1431C33v72Ev();
extern void _ZN7S1431C33v73Ev();
extern void _ZN7S1431C33v74Ev();
extern void _ZN7S1431C33v75Ev();
extern void _ZN7S1431C33v76Ev();
extern void _ZN7S1431C33v77Ev();
extern void _ZN7S1431C33v78Ev();
extern void _ZN7S1431C33v79Ev();
extern void _ZN7S1431C33v80Ev();
extern void _ZN7S1431C23v81Ev();
extern void _ZN7S1431C23v82Ev();
extern void _ZN7S1431C23v83Ev();
extern void _ZN7S1431C23v84Ev();
extern void _ZN7S1431C23v85Ev();
extern void _ZN7S1431C23v86Ev();
extern void _ZN7S1431C23v87Ev();
extern void _ZN7S1431C12v1Ev();
extern void _ZN7S1431C12v2Ev();
extern void _ZN7S1431C12v3Ev();
static  VTBL_ENTRY vtc_S1431C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1431C1[0]),
  (VTBL_ENTRY)&_ZN7S1431C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1431C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1431C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1431C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1431C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1431C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1431C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1431C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1431C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1431C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1431C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1431C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1431C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1431C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1431C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1431C1[];
extern  VTBL_ENTRY _ZTV7S1431C1[];
Class_Descriptor cd_S1431C1 = {  "S1431C1", // class name
  bases_S1431C1, 3,
  &(vtc_S1431C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,228), // object size
  NSPAIRA(_ZTI7S1431C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1431C1),91, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1432C4  {
  int s1432c4f0;
  __tsi64 s1432c4f1;
  void *s1432c4f2[4];
  int s1432c4f3[2];
  void *s1432c4f4;
  ::S3432C14_nt s1432c4f5;
  void *s1432c4f6[2];
  virtual  ~S1432C4(); // _ZN7S1432C4D1Ev
  virtual void  v4(); // _ZN7S1432C42v4Ev
  virtual void  v5(); // _ZN7S1432C42v5Ev
  virtual void  v6(); // _ZN7S1432C42v6Ev
  virtual void  v7(); // _ZN7S1432C42v7Ev
  virtual void  v8(); // _ZN7S1432C42v8Ev
  virtual void  v9(); // _ZN7S1432C42v9Ev
  virtual void  v10(); // _ZN7S1432C43v10Ev
  virtual void  v11(); // _ZN7S1432C43v11Ev
  virtual void  v12(); // _ZN7S1432C43v12Ev
  virtual void  v13(); // _ZN7S1432C43v13Ev
  virtual void  v14(); // _ZN7S1432C43v14Ev
  virtual void  v15(); // _ZN7S1432C43v15Ev
  virtual void  v16(); // _ZN7S1432C43v16Ev
  virtual void  v17(); // _ZN7S1432C43v17Ev
  virtual void  v18(); // _ZN7S1432C43v18Ev
  virtual void  v19(); // _ZN7S1432C43v19Ev
  virtual void  v20(); // _ZN7S1432C43v20Ev
  virtual void  v21(); // _ZN7S1432C43v21Ev
  virtual void  v22(); // _ZN7S1432C43v22Ev
  virtual void  v23(); // _ZN7S1432C43v23Ev
  virtual void  v24(); // _ZN7S1432C43v24Ev
  virtual void  v25(); // _ZN7S1432C43v25Ev
  virtual void  v26(); // _ZN7S1432C43v26Ev
  virtual void  v27(); // _ZN7S1432C43v27Ev
  virtual void  v28(); // _ZN7S1432C43v28Ev
  virtual void  v29(); // _ZN7S1432C43v29Ev
  virtual void  v30(); // _ZN7S1432C43v30Ev
  virtual void  v31(); // _ZN7S1432C43v31Ev
  virtual void  v32(); // _ZN7S1432C43v32Ev
  virtual void  v33(); // _ZN7S1432C43v33Ev
  virtual void  v34(); // _ZN7S1432C43v34Ev
  virtual void  v35(); // _ZN7S1432C43v35Ev
  virtual void  v36(); // _ZN7S1432C43v36Ev
  virtual void  v37(); // _ZN7S1432C43v37Ev
  virtual void  v38(); // _ZN7S1432C43v38Ev
  virtual void  v39(); // _ZN7S1432C43v39Ev
  virtual void  v40(); // _ZN7S1432C43v40Ev
  virtual void  v41(); // _ZN7S1432C43v41Ev
  virtual void  v42(); // _ZN7S1432C43v42Ev
  virtual void  v43(); // _ZN7S1432C43v43Ev
  virtual void  v44(); // _ZN7S1432C43v44Ev
  virtual void  v45(); // _ZN7S1432C43v45Ev
  virtual void  v46(); // _ZN7S1432C43v46Ev
  virtual void  v47(); // _ZN7S1432C43v47Ev
  virtual void  v48(); // _ZN7S1432C43v48Ev
  virtual void  v49(); // _ZN7S1432C43v49Ev
  virtual void  v50(); // _ZN7S1432C43v50Ev
  virtual void  v51(); // _ZN7S1432C43v51Ev
  virtual void  v52(); // _ZN7S1432C43v52Ev
  virtual void  v53(); // _ZN7S1432C43v53Ev
  virtual void  v54(); // _ZN7S1432C43v54Ev
  virtual void  v55(); // _ZN7S1432C43v55Ev
  virtual void  v56(); // _ZN7S1432C43v56Ev
  virtual void  v57(); // _ZN7S1432C43v57Ev
  virtual void  v58(); // _ZN7S1432C43v58Ev
  virtual void  v59(); // _ZN7S1432C43v59Ev
  virtual void  v60(); // _ZN7S1432C43v60Ev
  virtual void  v61(); // _ZN7S1432C43v61Ev
  virtual void  v62(); // _ZN7S1432C43v62Ev
  virtual void  v63(); // _ZN7S1432C43v63Ev
  virtual void  v64(); // _ZN7S1432C43v64Ev
  virtual void  v65(); // _ZN7S1432C43v65Ev
  virtual void  v66(); // _ZN7S1432C43v66Ev
  virtual void  v67(); // _ZN7S1432C43v67Ev
  S1432C4(); // tgen
};
//SIG(-1 S1432C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1432C4 ::~S1432C4(){ note_dtor("S1432C4", this);}
void  S1432C4 ::v4(){vfunc_called(this, "_ZN7S1432C42v4Ev");}
void  S1432C4 ::v5(){vfunc_called(this, "_ZN7S1432C42v5Ev");}
void  S1432C4 ::v6(){vfunc_called(this, "_ZN7S1432C42v6Ev");}
void  S1432C4 ::v7(){vfunc_called(this, "_ZN7S1432C42v7Ev");}
void  S1432C4 ::v8(){vfunc_called(this, "_ZN7S1432C42v8Ev");}
void  S1432C4 ::v9(){vfunc_called(this, "_ZN7S1432C42v9Ev");}
void  S1432C4 ::v10(){vfunc_called(this, "_ZN7S1432C43v10Ev");}
void  S1432C4 ::v11(){vfunc_called(this, "_ZN7S1432C43v11Ev");}
void  S1432C4 ::v12(){vfunc_called(this, "_ZN7S1432C43v12Ev");}
void  S1432C4 ::v13(){vfunc_called(this, "_ZN7S1432C43v13Ev");}
void  S1432C4 ::v14(){vfunc_called(this, "_ZN7S1432C43v14Ev");}
void  S1432C4 ::v15(){vfunc_called(this, "_ZN7S1432C43v15Ev");}
void  S1432C4 ::v16(){vfunc_called(this, "_ZN7S1432C43v16Ev");}
void  S1432C4 ::v17(){vfunc_called(this, "_ZN7S1432C43v17Ev");}
void  S1432C4 ::v18(){vfunc_called(this, "_ZN7S1432C43v18Ev");}
void  S1432C4 ::v19(){vfunc_called(this, "_ZN7S1432C43v19Ev");}
void  S1432C4 ::v20(){vfunc_called(this, "_ZN7S1432C43v20Ev");}
void  S1432C4 ::v21(){vfunc_called(this, "_ZN7S1432C43v21Ev");}
void  S1432C4 ::v22(){vfunc_called(this, "_ZN7S1432C43v22Ev");}
void  S1432C4 ::v23(){vfunc_called(this, "_ZN7S1432C43v23Ev");}
void  S1432C4 ::v24(){vfunc_called(this, "_ZN7S1432C43v24Ev");}
void  S1432C4 ::v25(){vfunc_called(this, "_ZN7S1432C43v25Ev");}
void  S1432C4 ::v26(){vfunc_called(this, "_ZN7S1432C43v26Ev");}
void  S1432C4 ::v27(){vfunc_called(this, "_ZN7S1432C43v27Ev");}
void  S1432C4 ::v28(){vfunc_called(this, "_ZN7S1432C43v28Ev");}
void  S1432C4 ::v29(){vfunc_called(this, "_ZN7S1432C43v29Ev");}
void  S1432C4 ::v30(){vfunc_called(this, "_ZN7S1432C43v30Ev");}
void  S1432C4 ::v31(){vfunc_called(this, "_ZN7S1432C43v31Ev");}
void  S1432C4 ::v32(){vfunc_called(this, "_ZN7S1432C43v32Ev");}
void  S1432C4 ::v33(){vfunc_called(this, "_ZN7S1432C43v33Ev");}
void  S1432C4 ::v34(){vfunc_called(this, "_ZN7S1432C43v34Ev");}
void  S1432C4 ::v35(){vfunc_called(this, "_ZN7S1432C43v35Ev");}
void  S1432C4 ::v36(){vfunc_called(this, "_ZN7S1432C43v36Ev");}
void  S1432C4 ::v37(){vfunc_called(this, "_ZN7S1432C43v37Ev");}
void  S1432C4 ::v38(){vfunc_called(this, "_ZN7S1432C43v38Ev");}
void  S1432C4 ::v39(){vfunc_called(this, "_ZN7S1432C43v39Ev");}
void  S1432C4 ::v40(){vfunc_called(this, "_ZN7S1432C43v40Ev");}
void  S1432C4 ::v41(){vfunc_called(this, "_ZN7S1432C43v41Ev");}
void  S1432C4 ::v42(){vfunc_called(this, "_ZN7S1432C43v42Ev");}
void  S1432C4 ::v43(){vfunc_called(this, "_ZN7S1432C43v43Ev");}
void  S1432C4 ::v44(){vfunc_called(this, "_ZN7S1432C43v44Ev");}
void  S1432C4 ::v45(){vfunc_called(this, "_ZN7S1432C43v45Ev");}
void  S1432C4 ::v46(){vfunc_called(this, "_ZN7S1432C43v46Ev");}
void  S1432C4 ::v47(){vfunc_called(this, "_ZN7S1432C43v47Ev");}
void  S1432C4 ::v48(){vfunc_called(this, "_ZN7S1432C43v48Ev");}
void  S1432C4 ::v49(){vfunc_called(this, "_ZN7S1432C43v49Ev");}
void  S1432C4 ::v50(){vfunc_called(this, "_ZN7S1432C43v50Ev");}
void  S1432C4 ::v51(){vfunc_called(this, "_ZN7S1432C43v51Ev");}
void  S1432C4 ::v52(){vfunc_called(this, "_ZN7S1432C43v52Ev");}
void  S1432C4 ::v53(){vfunc_called(this, "_ZN7S1432C43v53Ev");}
void  S1432C4 ::v54(){vfunc_called(this, "_ZN7S1432C43v54Ev");}
void  S1432C4 ::v55(){vfunc_called(this, "_ZN7S1432C43v55Ev");}
void  S1432C4 ::v56(){vfunc_called(this, "_ZN7S1432C43v56Ev");}
void  S1432C4 ::v57(){vfunc_called(this, "_ZN7S1432C43v57Ev");}
void  S1432C4 ::v58(){vfunc_called(this, "_ZN7S1432C43v58Ev");}
void  S1432C4 ::v59(){vfunc_called(this, "_ZN7S1432C43v59Ev");}
void  S1432C4 ::v60(){vfunc_called(this, "_ZN7S1432C43v60Ev");}
void  S1432C4 ::v61(){vfunc_called(this, "_ZN7S1432C43v61Ev");}
void  S1432C4 ::v62(){vfunc_called(this, "_ZN7S1432C43v62Ev");}
void  S1432C4 ::v63(){vfunc_called(this, "_ZN7S1432C43v63Ev");}
void  S1432C4 ::v64(){vfunc_called(this, "_ZN7S1432C43v64Ev");}
void  S1432C4 ::v65(){vfunc_called(this, "_ZN7S1432C43v65Ev");}
void  S1432C4 ::v66(){vfunc_called(this, "_ZN7S1432C43v66Ev");}
void  S1432C4 ::v67(){vfunc_called(this, "_ZN7S1432C43v67Ev");}
S1432C4 ::S1432C4(){ note_ctor("S1432C4", this);} // tgen

static void Test_S1432C4()
{
  extern Class_Descriptor cd_S1432C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1432C4, buf);
    S1432C4 *dp, &lv = *(dp=new (buf) S1432C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1432C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1432C4)");
    check_field_offset(lv, s1432c4f0, ABISELECT(8,4), "S1432C4.s1432c4f0");
    check_field_offset(lv, s1432c4f1, ABISELECT(16,8), "S1432C4.s1432c4f1");
    check_field_offset(lv, s1432c4f2, ABISELECT(24,16), "S1432C4.s1432c4f2");
    check_field_offset(lv, s1432c4f3, ABISELECT(56,32), "S1432C4.s1432c4f3");
    check_field_offset(lv, s1432c4f4, ABISELECT(64,40), "S1432C4.s1432c4f4");
    check_field_offset(lv, s1432c4f5, ABISELECT(72,44), "S1432C4.s1432c4f5");
    check_field_offset(lv, s1432c4f6, ABISELECT(80,52), "S1432C4.s1432c4f6");
    test_class_info(&lv, &cd_S1432C4);
    dp->~S1432C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1432C4(Test_S1432C4, "S1432C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1432C4C1Ev();
extern void _ZN7S1432C4D1Ev();
Name_Map name_map_S1432C4[] = {
  NSPAIR(_ZN7S1432C4C1Ev),
  NSPAIR(_ZN7S1432C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1432C4[];
extern void _ZN7S1432C4D1Ev();
extern void _ZN7S1432C4D0Ev();
extern void _ZN7S1432C42v4Ev();
extern void _ZN7S1432C42v5Ev();
extern void _ZN7S1432C42v6Ev();
extern void _ZN7S1432C42v7Ev();
extern void _ZN7S1432C42v8Ev();
extern void _ZN7S1432C42v9Ev();
extern void _ZN7S1432C43v10Ev();
extern void _ZN7S1432C43v11Ev();
extern void _ZN7S1432C43v12Ev();
extern void _ZN7S1432C43v13Ev();
extern void _ZN7S1432C43v14Ev();
extern void _ZN7S1432C43v15Ev();
extern void _ZN7S1432C43v16Ev();
extern void _ZN7S1432C43v17Ev();
extern void _ZN7S1432C43v18Ev();
extern void _ZN7S1432C43v19Ev();
extern void _ZN7S1432C43v20Ev();
extern void _ZN7S1432C43v21Ev();
extern void _ZN7S1432C43v22Ev();
extern void _ZN7S1432C43v23Ev();
extern void _ZN7S1432C43v24Ev();
extern void _ZN7S1432C43v25Ev();
extern void _ZN7S1432C43v26Ev();
extern void _ZN7S1432C43v27Ev();
extern void _ZN7S1432C43v28Ev();
extern void _ZN7S1432C43v29Ev();
extern void _ZN7S1432C43v30Ev();
extern void _ZN7S1432C43v31Ev();
extern void _ZN7S1432C43v32Ev();
extern void _ZN7S1432C43v33Ev();
extern void _ZN7S1432C43v34Ev();
extern void _ZN7S1432C43v35Ev();
extern void _ZN7S1432C43v36Ev();
extern void _ZN7S1432C43v37Ev();
extern void _ZN7S1432C43v38Ev();
extern void _ZN7S1432C43v39Ev();
extern void _ZN7S1432C43v40Ev();
extern void _ZN7S1432C43v41Ev();
extern void _ZN7S1432C43v42Ev();
extern void _ZN7S1432C43v43Ev();
extern void _ZN7S1432C43v44Ev();
extern void _ZN7S1432C43v45Ev();
extern void _ZN7S1432C43v46Ev();
extern void _ZN7S1432C43v47Ev();
extern void _ZN7S1432C43v48Ev();
extern void _ZN7S1432C43v49Ev();
extern void _ZN7S1432C43v50Ev();
extern void _ZN7S1432C43v51Ev();
extern void _ZN7S1432C43v52Ev();
extern void _ZN7S1432C43v53Ev();
extern void _ZN7S1432C43v54Ev();
extern void _ZN7S1432C43v55Ev();
extern void _ZN7S1432C43v56Ev();
extern void _ZN7S1432C43v57Ev();
extern void _ZN7S1432C43v58Ev();
extern void _ZN7S1432C43v59Ev();
extern void _ZN7S1432C43v60Ev();
extern void _ZN7S1432C43v61Ev();
extern void _ZN7S1432C43v62Ev();
extern void _ZN7S1432C43v63Ev();
extern void _ZN7S1432C43v64Ev();
extern void _ZN7S1432C43v65Ev();
extern void _ZN7S1432C43v66Ev();
extern void _ZN7S1432C43v67Ev();
static  VTBL_ENTRY vtc_S1432C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1432C4[0]),
  (VTBL_ENTRY)&_ZN7S1432C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1432C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v67Ev,
};
extern VTBL_ENTRY _ZTI7S1432C4[];
extern  VTBL_ENTRY _ZTV7S1432C4[];
Class_Descriptor cd_S1432C4 = {  "S1432C4", // class name
  0,0,//no base classes
  &(vtc_S1432C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1432C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1432C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1432C3  : S1432C4 {
  void *s1432c3f0;
  ::S3432C14_nt s1432c3f1;
  int s1432c3f2[5];
  unsigned int s1432c3f3:1;
  unsigned int s1432c3f4:1;
  unsigned int s1432c3f5:1;
  unsigned int s1432c3f6:1;
  unsigned int s1432c3f7:1;
  ::S273C21 s1432c3f8;
  ::S273C17 s1432c3f9;
  unsigned int s1432c3f10:1;
  int s1432c3f11[2];
  void *s1432c3f12;
  int s1432c3f13[3];
  virtual  ~S1432C3(); // _ZN7S1432C3D1Ev
  virtual void  v68(); // _ZN7S1432C33v68Ev
  virtual void  v69(); // _ZN7S1432C33v69Ev
  virtual void  v70(); // _ZN7S1432C33v70Ev
  virtual void  v71(); // _ZN7S1432C33v71Ev
  virtual void  v72(); // _ZN7S1432C33v72Ev
  virtual void  v73(); // _ZN7S1432C33v73Ev
  virtual void  v74(); // _ZN7S1432C33v74Ev
  virtual void  v75(); // _ZN7S1432C33v75Ev
  virtual void  v76(); // _ZN7S1432C33v76Ev
  virtual void  v77(); // _ZN7S1432C33v77Ev
  virtual void  v78(); // _ZN7S1432C33v78Ev
  virtual void  v79(); // _ZN7S1432C33v79Ev
  virtual void  v80(); // _ZN7S1432C33v80Ev
  S1432C3(); // tgen
};
//SIG(-1 S1432C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1432C3 ::~S1432C3(){ note_dtor("S1432C3", this);}
void  S1432C3 ::v68(){vfunc_called(this, "_ZN7S1432C33v68Ev");}
void  S1432C3 ::v69(){vfunc_called(this, "_ZN7S1432C33v69Ev");}
void  S1432C3 ::v70(){vfunc_called(this, "_ZN7S1432C33v70Ev");}
void  S1432C3 ::v71(){vfunc_called(this, "_ZN7S1432C33v71Ev");}
void  S1432C3 ::v72(){vfunc_called(this, "_ZN7S1432C33v72Ev");}
void  S1432C3 ::v73(){vfunc_called(this, "_ZN7S1432C33v73Ev");}
void  S1432C3 ::v74(){vfunc_called(this, "_ZN7S1432C33v74Ev");}
void  S1432C3 ::v75(){vfunc_called(this, "_ZN7S1432C33v75Ev");}
void  S1432C3 ::v76(){vfunc_called(this, "_ZN7S1432C33v76Ev");}
void  S1432C3 ::v77(){vfunc_called(this, "_ZN7S1432C33v77Ev");}
void  S1432C3 ::v78(){vfunc_called(this, "_ZN7S1432C33v78Ev");}
void  S1432C3 ::v79(){vfunc_called(this, "_ZN7S1432C33v79Ev");}
void  S1432C3 ::v80(){vfunc_called(this, "_ZN7S1432C33v80Ev");}
S1432C3 ::S1432C3(){ note_ctor("S1432C3", this);} // tgen

static void Test_S1432C3()
{
  extern Class_Descriptor cd_S1432C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1432C3, buf);
    S1432C3 *dp, &lv = *(dp=new (buf) S1432C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1432C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1432C3)");
    check_base_class_offset(lv, (S1432C4*), 0, "S1432C3");
    check_field_offset(lv, s1432c3f0, ABISELECT(96,60), "S1432C3.s1432c3f0");
    check_field_offset(lv, s1432c3f1, ABISELECT(104,64), "S1432C3.s1432c3f1");
    check_field_offset(lv, s1432c3f2, ABISELECT(112,72), "S1432C3.s1432c3f2");
    set_bf_and_test(lv, s1432c3f3, ABISELECT(132,92), 0, 1, 1, "S1432C3");
    set_bf_and_test(lv, s1432c3f4, ABISELECT(132,92), 1, 1, 1, "S1432C3");
    set_bf_and_test(lv, s1432c3f5, ABISELECT(132,92), 2, 1, 1, "S1432C3");
    set_bf_and_test(lv, s1432c3f6, ABISELECT(132,92), 3, 1, 1, "S1432C3");
    set_bf_and_test(lv, s1432c3f7, ABISELECT(132,92), 4, 1, 1, "S1432C3");
    check_field_offset(lv, s1432c3f8, ABISELECT(136,96), "S1432C3.s1432c3f8");
    check_field_offset(lv, s1432c3f9, ABISELECT(152,108), "S1432C3.s1432c3f9");
    set_bf_and_test(lv, s1432c3f10, ABISELECT(168,120), 0, 1, 1, "S1432C3");
    check_field_offset(lv, s1432c3f11, ABISELECT(172,124), "S1432C3.s1432c3f11");
    check_field_offset(lv, s1432c3f12, ABISELECT(184,132), "S1432C3.s1432c3f12");
    check_field_offset(lv, s1432c3f13, ABISELECT(192,136), "S1432C3.s1432c3f13");
    test_class_info(&lv, &cd_S1432C3);
    dp->~S1432C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1432C3(Test_S1432C3, "S1432C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1432C3C1Ev();
extern void _ZN7S1432C3D1Ev();
Name_Map name_map_S1432C3[] = {
  NSPAIR(_ZN7S1432C3C1Ev),
  NSPAIR(_ZN7S1432C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1432C4;
extern VTBL_ENTRY _ZTI7S1432C4[];
extern  VTBL_ENTRY _ZTV7S1432C4[];
static Base_Class bases_S1432C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1432C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1432C3[];
extern void _ZN7S1432C3D1Ev();
extern void _ZN7S1432C3D0Ev();
extern void _ZN7S1432C42v4Ev();
extern void _ZN7S1432C42v5Ev();
extern void _ZN7S1432C42v6Ev();
extern void _ZN7S1432C42v7Ev();
extern void _ZN7S1432C42v8Ev();
extern void _ZN7S1432C42v9Ev();
extern void _ZN7S1432C43v10Ev();
extern void _ZN7S1432C43v11Ev();
extern void _ZN7S1432C43v12Ev();
extern void _ZN7S1432C43v13Ev();
extern void _ZN7S1432C43v14Ev();
extern void _ZN7S1432C43v15Ev();
extern void _ZN7S1432C43v16Ev();
extern void _ZN7S1432C43v17Ev();
extern void _ZN7S1432C43v18Ev();
extern void _ZN7S1432C43v19Ev();
extern void _ZN7S1432C43v20Ev();
extern void _ZN7S1432C43v21Ev();
extern void _ZN7S1432C43v22Ev();
extern void _ZN7S1432C43v23Ev();
extern void _ZN7S1432C43v24Ev();
extern void _ZN7S1432C43v25Ev();
extern void _ZN7S1432C43v26Ev();
extern void _ZN7S1432C43v27Ev();
extern void _ZN7S1432C43v28Ev();
extern void _ZN7S1432C43v29Ev();
extern void _ZN7S1432C43v30Ev();
extern void _ZN7S1432C43v31Ev();
extern void _ZN7S1432C43v32Ev();
extern void _ZN7S1432C43v33Ev();
extern void _ZN7S1432C43v34Ev();
extern void _ZN7S1432C43v35Ev();
extern void _ZN7S1432C43v36Ev();
extern void _ZN7S1432C43v37Ev();
extern void _ZN7S1432C43v38Ev();
extern void _ZN7S1432C43v39Ev();
extern void _ZN7S1432C43v40Ev();
extern void _ZN7S1432C43v41Ev();
extern void _ZN7S1432C43v42Ev();
extern void _ZN7S1432C43v43Ev();
extern void _ZN7S1432C43v44Ev();
extern void _ZN7S1432C43v45Ev();
extern void _ZN7S1432C43v46Ev();
extern void _ZN7S1432C43v47Ev();
extern void _ZN7S1432C43v48Ev();
extern void _ZN7S1432C43v49Ev();
extern void _ZN7S1432C43v50Ev();
extern void _ZN7S1432C43v51Ev();
extern void _ZN7S1432C43v52Ev();
extern void _ZN7S1432C43v53Ev();
extern void _ZN7S1432C43v54Ev();
extern void _ZN7S1432C43v55Ev();
extern void _ZN7S1432C43v56Ev();
extern void _ZN7S1432C43v57Ev();
extern void _ZN7S1432C43v58Ev();
extern void _ZN7S1432C43v59Ev();
extern void _ZN7S1432C43v60Ev();
extern void _ZN7S1432C43v61Ev();
extern void _ZN7S1432C43v62Ev();
extern void _ZN7S1432C43v63Ev();
extern void _ZN7S1432C43v64Ev();
extern void _ZN7S1432C43v65Ev();
extern void _ZN7S1432C43v66Ev();
extern void _ZN7S1432C43v67Ev();
extern void _ZN7S1432C33v68Ev();
extern void _ZN7S1432C33v69Ev();
extern void _ZN7S1432C33v70Ev();
extern void _ZN7S1432C33v71Ev();
extern void _ZN7S1432C33v72Ev();
extern void _ZN7S1432C33v73Ev();
extern void _ZN7S1432C33v74Ev();
extern void _ZN7S1432C33v75Ev();
extern void _ZN7S1432C33v76Ev();
extern void _ZN7S1432C33v77Ev();
extern void _ZN7S1432C33v78Ev();
extern void _ZN7S1432C33v79Ev();
extern void _ZN7S1432C33v80Ev();
static  VTBL_ENTRY vtc_S1432C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1432C3[0]),
  (VTBL_ENTRY)&_ZN7S1432C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1432C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S1432C3[];
extern  VTBL_ENTRY _ZTV7S1432C3[];
Class_Descriptor cd_S1432C3 = {  "S1432C3", // class name
  bases_S1432C3, 1,
  &(vtc_S1432C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1432C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1432C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1432C2  : S1432C3 {
  unsigned int s1432c2f0:1;
  unsigned int s1432c2f1:1;
  unsigned int s1432c2f2:1;
  unsigned int s1432c2f3:1;
  ::S664C12_nt s1432c2f4;
  char s1432c2f5[2];
  ::S3432C14_nt s1432c2f6;
  ::S632C13 s1432c2f7;
  ::S3432C14_nt s1432c2f8;
  virtual  ~S1432C2(); // _ZN7S1432C2D1Ev
  virtual void  v81(); // _ZN7S1432C23v81Ev
  virtual void  v82(); // _ZN7S1432C23v82Ev
  virtual void  v83(); // _ZN7S1432C23v83Ev
  virtual void  v84(); // _ZN7S1432C23v84Ev
  virtual void  v85(); // _ZN7S1432C23v85Ev
  virtual void  v86(); // _ZN7S1432C23v86Ev
  virtual void  v87(); // _ZN7S1432C23v87Ev
  S1432C2(); // tgen
};
//SIG(-1 S1432C2) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S1432C2 ::~S1432C2(){ note_dtor("S1432C2", this);}
void  S1432C2 ::v81(){vfunc_called(this, "_ZN7S1432C23v81Ev");}
void  S1432C2 ::v82(){vfunc_called(this, "_ZN7S1432C23v82Ev");}
void  S1432C2 ::v83(){vfunc_called(this, "_ZN7S1432C23v83Ev");}
void  S1432C2 ::v84(){vfunc_called(this, "_ZN7S1432C23v84Ev");}
void  S1432C2 ::v85(){vfunc_called(this, "_ZN7S1432C23v85Ev");}
void  S1432C2 ::v86(){vfunc_called(this, "_ZN7S1432C23v86Ev");}
void  S1432C2 ::v87(){vfunc_called(this, "_ZN7S1432C23v87Ev");}
S1432C2 ::S1432C2(){ note_ctor("S1432C2", this);} // tgen

static void Test_S1432C2()
{
  extern Class_Descriptor cd_S1432C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1432C2, buf);
    S1432C2 *dp, &lv = *(dp=new (buf) S1432C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1432C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1432C2)");
    check_base_class_offset(lv, (S1432C4*)(S1432C3*), 0, "S1432C2");
    check_base_class_offset(lv, (S1432C3*), 0, "S1432C2");
    set_bf_and_test(lv, s1432c2f0, ABISELECT(204,148), 0, 1, 1, "S1432C2");
    set_bf_and_test(lv, s1432c2f1, ABISELECT(204,148), 1, 1, 1, "S1432C2");
    set_bf_and_test(lv, s1432c2f2, ABISELECT(204,148), 2, 1, 1, "S1432C2");
    set_bf_and_test(lv, s1432c2f3, ABISELECT(204,148), 3, 1, 1, "S1432C2");
    check_field_offset(lv, s1432c2f4, ABISELECT(208,152), "S1432C2.s1432c2f4");
    check_field_offset(lv, s1432c2f5, ABISELECT(220,164), "S1432C2.s1432c2f5");
    check_field_offset(lv, s1432c2f6, ABISELECT(224,168), "S1432C2.s1432c2f6");
    check_field_offset(lv, s1432c2f7, ABISELECT(232,176), "S1432C2.s1432c2f7");
    check_field_offset(lv, s1432c2f8, ABISELECT(244,188), "S1432C2.s1432c2f8");
    test_class_info(&lv, &cd_S1432C2);
    dp->~S1432C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1432C2(Test_S1432C2, "S1432C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1432C2C1Ev();
extern void _ZN7S1432C2D1Ev();
Name_Map name_map_S1432C2[] = {
  NSPAIR(_ZN7S1432C2C1Ev),
  NSPAIR(_ZN7S1432C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1432C4;
extern VTBL_ENTRY _ZTI7S1432C4[];
extern  VTBL_ENTRY _ZTV7S1432C4[];
extern Class_Descriptor cd_S1432C3;
extern VTBL_ENTRY _ZTI7S1432C3[];
extern  VTBL_ENTRY _ZTV7S1432C3[];
static Base_Class bases_S1432C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1432C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1432C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1432C2[];
extern void _ZN7S1432C2D1Ev();
extern void _ZN7S1432C2D0Ev();
extern void _ZN7S1432C42v4Ev();
extern void _ZN7S1432C42v5Ev();
extern void _ZN7S1432C42v6Ev();
extern void _ZN7S1432C42v7Ev();
extern void _ZN7S1432C42v8Ev();
extern void _ZN7S1432C42v9Ev();
extern void _ZN7S1432C43v10Ev();
extern void _ZN7S1432C43v11Ev();
extern void _ZN7S1432C43v12Ev();
extern void _ZN7S1432C43v13Ev();
extern void _ZN7S1432C43v14Ev();
extern void _ZN7S1432C43v15Ev();
extern void _ZN7S1432C43v16Ev();
extern void _ZN7S1432C43v17Ev();
extern void _ZN7S1432C43v18Ev();
extern void _ZN7S1432C43v19Ev();
extern void _ZN7S1432C43v20Ev();
extern void _ZN7S1432C43v21Ev();
extern void _ZN7S1432C43v22Ev();
extern void _ZN7S1432C43v23Ev();
extern void _ZN7S1432C43v24Ev();
extern void _ZN7S1432C43v25Ev();
extern void _ZN7S1432C43v26Ev();
extern void _ZN7S1432C43v27Ev();
extern void _ZN7S1432C43v28Ev();
extern void _ZN7S1432C43v29Ev();
extern void _ZN7S1432C43v30Ev();
extern void _ZN7S1432C43v31Ev();
extern void _ZN7S1432C43v32Ev();
extern void _ZN7S1432C43v33Ev();
extern void _ZN7S1432C43v34Ev();
extern void _ZN7S1432C43v35Ev();
extern void _ZN7S1432C43v36Ev();
extern void _ZN7S1432C43v37Ev();
extern void _ZN7S1432C43v38Ev();
extern void _ZN7S1432C43v39Ev();
extern void _ZN7S1432C43v40Ev();
extern void _ZN7S1432C43v41Ev();
extern void _ZN7S1432C43v42Ev();
extern void _ZN7S1432C43v43Ev();
extern void _ZN7S1432C43v44Ev();
extern void _ZN7S1432C43v45Ev();
extern void _ZN7S1432C43v46Ev();
extern void _ZN7S1432C43v47Ev();
extern void _ZN7S1432C43v48Ev();
extern void _ZN7S1432C43v49Ev();
extern void _ZN7S1432C43v50Ev();
extern void _ZN7S1432C43v51Ev();
extern void _ZN7S1432C43v52Ev();
extern void _ZN7S1432C43v53Ev();
extern void _ZN7S1432C43v54Ev();
extern void _ZN7S1432C43v55Ev();
extern void _ZN7S1432C43v56Ev();
extern void _ZN7S1432C43v57Ev();
extern void _ZN7S1432C43v58Ev();
extern void _ZN7S1432C43v59Ev();
extern void _ZN7S1432C43v60Ev();
extern void _ZN7S1432C43v61Ev();
extern void _ZN7S1432C43v62Ev();
extern void _ZN7S1432C43v63Ev();
extern void _ZN7S1432C43v64Ev();
extern void _ZN7S1432C43v65Ev();
extern void _ZN7S1432C43v66Ev();
extern void _ZN7S1432C43v67Ev();
extern void _ZN7S1432C33v68Ev();
extern void _ZN7S1432C33v69Ev();
extern void _ZN7S1432C33v70Ev();
extern void _ZN7S1432C33v71Ev();
extern void _ZN7S1432C33v72Ev();
extern void _ZN7S1432C33v73Ev();
extern void _ZN7S1432C33v74Ev();
extern void _ZN7S1432C33v75Ev();
extern void _ZN7S1432C33v76Ev();
extern void _ZN7S1432C33v77Ev();
extern void _ZN7S1432C33v78Ev();
extern void _ZN7S1432C33v79Ev();
extern void _ZN7S1432C33v80Ev();
extern void _ZN7S1432C23v81Ev();
extern void _ZN7S1432C23v82Ev();
extern void _ZN7S1432C23v83Ev();
extern void _ZN7S1432C23v84Ev();
extern void _ZN7S1432C23v85Ev();
extern void _ZN7S1432C23v86Ev();
extern void _ZN7S1432C23v87Ev();
static  VTBL_ENTRY vtc_S1432C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1432C2[0]),
  (VTBL_ENTRY)&_ZN7S1432C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1432C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1432C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1432C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1432C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1432C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1432C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1432C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1432C23v87Ev,
};
extern VTBL_ENTRY _ZTI7S1432C2[];
extern  VTBL_ENTRY _ZTV7S1432C2[];
Class_Descriptor cd_S1432C2 = {  "S1432C2", // class name
  bases_S1432C2, 2,
  &(vtc_S1432C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1432C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1432C2),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1432C1  : S1432C2 {
  int s1432c1f0[5];
  unsigned int s1432c1f1:1;
  virtual  ~S1432C1(); // _ZN7S1432C1D1Ev
  virtual void  v1(); // _ZN7S1432C12v1Ev
  virtual void  v2(); // _ZN7S1432C12v2Ev
  virtual void  v3(); // _ZN7S1432C12v3Ev
  S1432C1(); // tgen
};
//SIG(1 S1432C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 Fi[5] Fi:1}


 S1432C1 ::~S1432C1(){ note_dtor("S1432C1", this);}
void  S1432C1 ::v1(){vfunc_called(this, "_ZN7S1432C12v1Ev");}
void  S1432C1 ::v2(){vfunc_called(this, "_ZN7S1432C12v2Ev");}
void  S1432C1 ::v3(){vfunc_called(this, "_ZN7S1432C12v3Ev");}
S1432C1 ::S1432C1(){ note_ctor("S1432C1", this);} // tgen

static void Test_S1432C1()
{
  extern Class_Descriptor cd_S1432C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,56)];
    init_test(&cd_S1432C1, buf);
    S1432C1 *dp, &lv = *(dp=new (buf) S1432C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,220), "sizeof(S1432C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1432C1)");
    check_base_class_offset(lv, (S1432C4*)(S1432C3*)(S1432C2*), 0, "S1432C1");
    check_base_class_offset(lv, (S1432C3*)(S1432C2*), 0, "S1432C1");
    check_base_class_offset(lv, (S1432C2*), 0, "S1432C1");
    check_field_offset(lv, s1432c1f0, ABISELECT(252,196), "S1432C1.s1432c1f0");
    set_bf_and_test(lv, s1432c1f1, ABISELECT(272,216), 0, 1, 1, "S1432C1");
    test_class_info(&lv, &cd_S1432C1);
    dp->~S1432C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1432C1(Test_S1432C1, "S1432C1", ABISELECT(280,220));

#else // __cplusplus

extern void _ZN7S1432C1C1Ev();
extern void _ZN7S1432C1D1Ev();
Name_Map name_map_S1432C1[] = {
  NSPAIR(_ZN7S1432C1C1Ev),
  NSPAIR(_ZN7S1432C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1432C4;
extern VTBL_ENTRY _ZTI7S1432C4[];
extern  VTBL_ENTRY _ZTV7S1432C4[];
extern Class_Descriptor cd_S1432C3;
extern VTBL_ENTRY _ZTI7S1432C3[];
extern  VTBL_ENTRY _ZTV7S1432C3[];
extern Class_Descriptor cd_S1432C2;
extern VTBL_ENTRY _ZTI7S1432C2[];
extern  VTBL_ENTRY _ZTV7S1432C2[];
static Base_Class bases_S1432C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1432C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1432C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1432C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1432C1[];
extern void _ZN7S1432C1D1Ev();
extern void _ZN7S1432C1D0Ev();
extern void _ZN7S1432C42v4Ev();
extern void _ZN7S1432C42v5Ev();
extern void _ZN7S1432C42v6Ev();
extern void _ZN7S1432C42v7Ev();
extern void _ZN7S1432C42v8Ev();
extern void _ZN7S1432C42v9Ev();
extern void _ZN7S1432C43v10Ev();
extern void _ZN7S1432C43v11Ev();
extern void _ZN7S1432C43v12Ev();
extern void _ZN7S1432C43v13Ev();
extern void _ZN7S1432C43v14Ev();
extern void _ZN7S1432C43v15Ev();
extern void _ZN7S1432C43v16Ev();
extern void _ZN7S1432C43v17Ev();
extern void _ZN7S1432C43v18Ev();
extern void _ZN7S1432C43v19Ev();
extern void _ZN7S1432C43v20Ev();
extern void _ZN7S1432C43v21Ev();
extern void _ZN7S1432C43v22Ev();
extern void _ZN7S1432C43v23Ev();
extern void _ZN7S1432C43v24Ev();
extern void _ZN7S1432C43v25Ev();
extern void _ZN7S1432C43v26Ev();
extern void _ZN7S1432C43v27Ev();
extern void _ZN7S1432C43v28Ev();
extern void _ZN7S1432C43v29Ev();
extern void _ZN7S1432C43v30Ev();
extern void _ZN7S1432C43v31Ev();
extern void _ZN7S1432C43v32Ev();
extern void _ZN7S1432C43v33Ev();
extern void _ZN7S1432C43v34Ev();
extern void _ZN7S1432C43v35Ev();
extern void _ZN7S1432C43v36Ev();
extern void _ZN7S1432C43v37Ev();
extern void _ZN7S1432C43v38Ev();
extern void _ZN7S1432C43v39Ev();
extern void _ZN7S1432C43v40Ev();
extern void _ZN7S1432C43v41Ev();
extern void _ZN7S1432C43v42Ev();
extern void _ZN7S1432C43v43Ev();
extern void _ZN7S1432C43v44Ev();
extern void _ZN7S1432C43v45Ev();
extern void _ZN7S1432C43v46Ev();
extern void _ZN7S1432C43v47Ev();
extern void _ZN7S1432C43v48Ev();
extern void _ZN7S1432C43v49Ev();
extern void _ZN7S1432C43v50Ev();
extern void _ZN7S1432C43v51Ev();
extern void _ZN7S1432C43v52Ev();
extern void _ZN7S1432C43v53Ev();
extern void _ZN7S1432C43v54Ev();
extern void _ZN7S1432C43v55Ev();
extern void _ZN7S1432C43v56Ev();
extern void _ZN7S1432C43v57Ev();
extern void _ZN7S1432C43v58Ev();
extern void _ZN7S1432C43v59Ev();
extern void _ZN7S1432C43v60Ev();
extern void _ZN7S1432C43v61Ev();
extern void _ZN7S1432C43v62Ev();
extern void _ZN7S1432C43v63Ev();
extern void _ZN7S1432C43v64Ev();
extern void _ZN7S1432C43v65Ev();
extern void _ZN7S1432C43v66Ev();
extern void _ZN7S1432C43v67Ev();
extern void _ZN7S1432C33v68Ev();
extern void _ZN7S1432C33v69Ev();
extern void _ZN7S1432C33v70Ev();
extern void _ZN7S1432C33v71Ev();
extern void _ZN7S1432C33v72Ev();
extern void _ZN7S1432C33v73Ev();
extern void _ZN7S1432C33v74Ev();
extern void _ZN7S1432C33v75Ev();
extern void _ZN7S1432C33v76Ev();
extern void _ZN7S1432C33v77Ev();
extern void _ZN7S1432C33v78Ev();
extern void _ZN7S1432C33v79Ev();
extern void _ZN7S1432C33v80Ev();
extern void _ZN7S1432C23v81Ev();
extern void _ZN7S1432C23v82Ev();
extern void _ZN7S1432C23v83Ev();
extern void _ZN7S1432C23v84Ev();
extern void _ZN7S1432C23v85Ev();
extern void _ZN7S1432C23v86Ev();
extern void _ZN7S1432C23v87Ev();
extern void _ZN7S1432C12v1Ev();
extern void _ZN7S1432C12v2Ev();
extern void _ZN7S1432C12v3Ev();
static  VTBL_ENTRY vtc_S1432C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1432C1[0]),
  (VTBL_ENTRY)&_ZN7S1432C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1432C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1432C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1432C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1432C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1432C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1432C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1432C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1432C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1432C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1432C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1432C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1432C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1432C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1432C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1432C1[];
extern  VTBL_ENTRY _ZTV7S1432C1[];
Class_Descriptor cd_S1432C1 = {  "S1432C1", // class name
  bases_S1432C1, 3,
  &(vtc_S1432C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,220), // object size
  NSPAIRA(_ZTI7S1432C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1432C1),91, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1428C4  {
  int s1428c4f0;
  __tsi64 s1428c4f1;
  void *s1428c4f2[4];
  int s1428c4f3[2];
  void *s1428c4f4;
  ::S3432C14_nt s1428c4f5;
  void *s1428c4f6[2];
  virtual  ~S1428C4(); // _ZN7S1428C4D1Ev
  virtual void  v4(); // _ZN7S1428C42v4Ev
  virtual void  v5(); // _ZN7S1428C42v5Ev
  virtual void  v6(); // _ZN7S1428C42v6Ev
  virtual void  v7(); // _ZN7S1428C42v7Ev
  virtual void  v8(); // _ZN7S1428C42v8Ev
  virtual void  v9(); // _ZN7S1428C42v9Ev
  virtual void  v10(); // _ZN7S1428C43v10Ev
  virtual void  v11(); // _ZN7S1428C43v11Ev
  virtual void  v12(); // _ZN7S1428C43v12Ev
  virtual void  v13(); // _ZN7S1428C43v13Ev
  virtual void  v14(); // _ZN7S1428C43v14Ev
  virtual void  v15(); // _ZN7S1428C43v15Ev
  virtual void  v16(); // _ZN7S1428C43v16Ev
  virtual void  v17(); // _ZN7S1428C43v17Ev
  virtual void  v18(); // _ZN7S1428C43v18Ev
  virtual void  v19(); // _ZN7S1428C43v19Ev
  virtual void  v20(); // _ZN7S1428C43v20Ev
  virtual void  v21(); // _ZN7S1428C43v21Ev
  virtual void  v22(); // _ZN7S1428C43v22Ev
  virtual void  v23(); // _ZN7S1428C43v23Ev
  virtual void  v24(); // _ZN7S1428C43v24Ev
  virtual void  v25(); // _ZN7S1428C43v25Ev
  virtual void  v26(); // _ZN7S1428C43v26Ev
  virtual void  v27(); // _ZN7S1428C43v27Ev
  virtual void  v28(); // _ZN7S1428C43v28Ev
  virtual void  v29(); // _ZN7S1428C43v29Ev
  virtual void  v30(); // _ZN7S1428C43v30Ev
  virtual void  v31(); // _ZN7S1428C43v31Ev
  virtual void  v32(); // _ZN7S1428C43v32Ev
  virtual void  v33(); // _ZN7S1428C43v33Ev
  virtual void  v34(); // _ZN7S1428C43v34Ev
  virtual void  v35(); // _ZN7S1428C43v35Ev
  virtual void  v36(); // _ZN7S1428C43v36Ev
  virtual void  v37(); // _ZN7S1428C43v37Ev
  virtual void  v38(); // _ZN7S1428C43v38Ev
  virtual void  v39(); // _ZN7S1428C43v39Ev
  virtual void  v40(); // _ZN7S1428C43v40Ev
  virtual void  v41(); // _ZN7S1428C43v41Ev
  virtual void  v42(); // _ZN7S1428C43v42Ev
  virtual void  v43(); // _ZN7S1428C43v43Ev
  virtual void  v44(); // _ZN7S1428C43v44Ev
  virtual void  v45(); // _ZN7S1428C43v45Ev
  virtual void  v46(); // _ZN7S1428C43v46Ev
  virtual void  v47(); // _ZN7S1428C43v47Ev
  virtual void  v48(); // _ZN7S1428C43v48Ev
  virtual void  v49(); // _ZN7S1428C43v49Ev
  virtual void  v50(); // _ZN7S1428C43v50Ev
  virtual void  v51(); // _ZN7S1428C43v51Ev
  virtual void  v52(); // _ZN7S1428C43v52Ev
  virtual void  v53(); // _ZN7S1428C43v53Ev
  virtual void  v54(); // _ZN7S1428C43v54Ev
  virtual void  v55(); // _ZN7S1428C43v55Ev
  virtual void  v56(); // _ZN7S1428C43v56Ev
  virtual void  v57(); // _ZN7S1428C43v57Ev
  virtual void  v58(); // _ZN7S1428C43v58Ev
  virtual void  v59(); // _ZN7S1428C43v59Ev
  virtual void  v60(); // _ZN7S1428C43v60Ev
  virtual void  v61(); // _ZN7S1428C43v61Ev
  virtual void  v62(); // _ZN7S1428C43v62Ev
  virtual void  v63(); // _ZN7S1428C43v63Ev
  virtual void  v64(); // _ZN7S1428C43v64Ev
  virtual void  v65(); // _ZN7S1428C43v65Ev
  virtual void  v66(); // _ZN7S1428C43v66Ev
  virtual void  v67(); // _ZN7S1428C43v67Ev
  S1428C4(); // tgen
};
//SIG(-1 S1428C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1428C4 ::~S1428C4(){ note_dtor("S1428C4", this);}
void  S1428C4 ::v4(){vfunc_called(this, "_ZN7S1428C42v4Ev");}
void  S1428C4 ::v5(){vfunc_called(this, "_ZN7S1428C42v5Ev");}
void  S1428C4 ::v6(){vfunc_called(this, "_ZN7S1428C42v6Ev");}
void  S1428C4 ::v7(){vfunc_called(this, "_ZN7S1428C42v7Ev");}
void  S1428C4 ::v8(){vfunc_called(this, "_ZN7S1428C42v8Ev");}
void  S1428C4 ::v9(){vfunc_called(this, "_ZN7S1428C42v9Ev");}
void  S1428C4 ::v10(){vfunc_called(this, "_ZN7S1428C43v10Ev");}
void  S1428C4 ::v11(){vfunc_called(this, "_ZN7S1428C43v11Ev");}
void  S1428C4 ::v12(){vfunc_called(this, "_ZN7S1428C43v12Ev");}
void  S1428C4 ::v13(){vfunc_called(this, "_ZN7S1428C43v13Ev");}
void  S1428C4 ::v14(){vfunc_called(this, "_ZN7S1428C43v14Ev");}
void  S1428C4 ::v15(){vfunc_called(this, "_ZN7S1428C43v15Ev");}
void  S1428C4 ::v16(){vfunc_called(this, "_ZN7S1428C43v16Ev");}
void  S1428C4 ::v17(){vfunc_called(this, "_ZN7S1428C43v17Ev");}
void  S1428C4 ::v18(){vfunc_called(this, "_ZN7S1428C43v18Ev");}
void  S1428C4 ::v19(){vfunc_called(this, "_ZN7S1428C43v19Ev");}
void  S1428C4 ::v20(){vfunc_called(this, "_ZN7S1428C43v20Ev");}
void  S1428C4 ::v21(){vfunc_called(this, "_ZN7S1428C43v21Ev");}
void  S1428C4 ::v22(){vfunc_called(this, "_ZN7S1428C43v22Ev");}
void  S1428C4 ::v23(){vfunc_called(this, "_ZN7S1428C43v23Ev");}
void  S1428C4 ::v24(){vfunc_called(this, "_ZN7S1428C43v24Ev");}
void  S1428C4 ::v25(){vfunc_called(this, "_ZN7S1428C43v25Ev");}
void  S1428C4 ::v26(){vfunc_called(this, "_ZN7S1428C43v26Ev");}
void  S1428C4 ::v27(){vfunc_called(this, "_ZN7S1428C43v27Ev");}
void  S1428C4 ::v28(){vfunc_called(this, "_ZN7S1428C43v28Ev");}
void  S1428C4 ::v29(){vfunc_called(this, "_ZN7S1428C43v29Ev");}
void  S1428C4 ::v30(){vfunc_called(this, "_ZN7S1428C43v30Ev");}
void  S1428C4 ::v31(){vfunc_called(this, "_ZN7S1428C43v31Ev");}
void  S1428C4 ::v32(){vfunc_called(this, "_ZN7S1428C43v32Ev");}
void  S1428C4 ::v33(){vfunc_called(this, "_ZN7S1428C43v33Ev");}
void  S1428C4 ::v34(){vfunc_called(this, "_ZN7S1428C43v34Ev");}
void  S1428C4 ::v35(){vfunc_called(this, "_ZN7S1428C43v35Ev");}
void  S1428C4 ::v36(){vfunc_called(this, "_ZN7S1428C43v36Ev");}
void  S1428C4 ::v37(){vfunc_called(this, "_ZN7S1428C43v37Ev");}
void  S1428C4 ::v38(){vfunc_called(this, "_ZN7S1428C43v38Ev");}
void  S1428C4 ::v39(){vfunc_called(this, "_ZN7S1428C43v39Ev");}
void  S1428C4 ::v40(){vfunc_called(this, "_ZN7S1428C43v40Ev");}
void  S1428C4 ::v41(){vfunc_called(this, "_ZN7S1428C43v41Ev");}
void  S1428C4 ::v42(){vfunc_called(this, "_ZN7S1428C43v42Ev");}
void  S1428C4 ::v43(){vfunc_called(this, "_ZN7S1428C43v43Ev");}
void  S1428C4 ::v44(){vfunc_called(this, "_ZN7S1428C43v44Ev");}
void  S1428C4 ::v45(){vfunc_called(this, "_ZN7S1428C43v45Ev");}
void  S1428C4 ::v46(){vfunc_called(this, "_ZN7S1428C43v46Ev");}
void  S1428C4 ::v47(){vfunc_called(this, "_ZN7S1428C43v47Ev");}
void  S1428C4 ::v48(){vfunc_called(this, "_ZN7S1428C43v48Ev");}
void  S1428C4 ::v49(){vfunc_called(this, "_ZN7S1428C43v49Ev");}
void  S1428C4 ::v50(){vfunc_called(this, "_ZN7S1428C43v50Ev");}
void  S1428C4 ::v51(){vfunc_called(this, "_ZN7S1428C43v51Ev");}
void  S1428C4 ::v52(){vfunc_called(this, "_ZN7S1428C43v52Ev");}
void  S1428C4 ::v53(){vfunc_called(this, "_ZN7S1428C43v53Ev");}
void  S1428C4 ::v54(){vfunc_called(this, "_ZN7S1428C43v54Ev");}
void  S1428C4 ::v55(){vfunc_called(this, "_ZN7S1428C43v55Ev");}
void  S1428C4 ::v56(){vfunc_called(this, "_ZN7S1428C43v56Ev");}
void  S1428C4 ::v57(){vfunc_called(this, "_ZN7S1428C43v57Ev");}
void  S1428C4 ::v58(){vfunc_called(this, "_ZN7S1428C43v58Ev");}
void  S1428C4 ::v59(){vfunc_called(this, "_ZN7S1428C43v59Ev");}
void  S1428C4 ::v60(){vfunc_called(this, "_ZN7S1428C43v60Ev");}
void  S1428C4 ::v61(){vfunc_called(this, "_ZN7S1428C43v61Ev");}
void  S1428C4 ::v62(){vfunc_called(this, "_ZN7S1428C43v62Ev");}
void  S1428C4 ::v63(){vfunc_called(this, "_ZN7S1428C43v63Ev");}
void  S1428C4 ::v64(){vfunc_called(this, "_ZN7S1428C43v64Ev");}
void  S1428C4 ::v65(){vfunc_called(this, "_ZN7S1428C43v65Ev");}
void  S1428C4 ::v66(){vfunc_called(this, "_ZN7S1428C43v66Ev");}
void  S1428C4 ::v67(){vfunc_called(this, "_ZN7S1428C43v67Ev");}
S1428C4 ::S1428C4(){ note_ctor("S1428C4", this);} // tgen

static void Test_S1428C4()
{
  extern Class_Descriptor cd_S1428C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1428C4, buf);
    S1428C4 *dp, &lv = *(dp=new (buf) S1428C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1428C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1428C4)");
    check_field_offset(lv, s1428c4f0, ABISELECT(8,4), "S1428C4.s1428c4f0");
    check_field_offset(lv, s1428c4f1, ABISELECT(16,8), "S1428C4.s1428c4f1");
    check_field_offset(lv, s1428c4f2, ABISELECT(24,16), "S1428C4.s1428c4f2");
    check_field_offset(lv, s1428c4f3, ABISELECT(56,32), "S1428C4.s1428c4f3");
    check_field_offset(lv, s1428c4f4, ABISELECT(64,40), "S1428C4.s1428c4f4");
    check_field_offset(lv, s1428c4f5, ABISELECT(72,44), "S1428C4.s1428c4f5");
    check_field_offset(lv, s1428c4f6, ABISELECT(80,52), "S1428C4.s1428c4f6");
    test_class_info(&lv, &cd_S1428C4);
    dp->~S1428C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1428C4(Test_S1428C4, "S1428C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1428C4C1Ev();
extern void _ZN7S1428C4D1Ev();
Name_Map name_map_S1428C4[] = {
  NSPAIR(_ZN7S1428C4C1Ev),
  NSPAIR(_ZN7S1428C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1428C4[];
extern void _ZN7S1428C4D1Ev();
extern void _ZN7S1428C4D0Ev();
extern void _ZN7S1428C42v4Ev();
extern void _ZN7S1428C42v5Ev();
extern void _ZN7S1428C42v6Ev();
extern void _ZN7S1428C42v7Ev();
extern void _ZN7S1428C42v8Ev();
extern void _ZN7S1428C42v9Ev();
extern void _ZN7S1428C43v10Ev();
extern void _ZN7S1428C43v11Ev();
extern void _ZN7S1428C43v12Ev();
extern void _ZN7S1428C43v13Ev();
extern void _ZN7S1428C43v14Ev();
extern void _ZN7S1428C43v15Ev();
extern void _ZN7S1428C43v16Ev();
extern void _ZN7S1428C43v17Ev();
extern void _ZN7S1428C43v18Ev();
extern void _ZN7S1428C43v19Ev();
extern void _ZN7S1428C43v20Ev();
extern void _ZN7S1428C43v21Ev();
extern void _ZN7S1428C43v22Ev();
extern void _ZN7S1428C43v23Ev();
extern void _ZN7S1428C43v24Ev();
extern void _ZN7S1428C43v25Ev();
extern void _ZN7S1428C43v26Ev();
extern void _ZN7S1428C43v27Ev();
extern void _ZN7S1428C43v28Ev();
extern void _ZN7S1428C43v29Ev();
extern void _ZN7S1428C43v30Ev();
extern void _ZN7S1428C43v31Ev();
extern void _ZN7S1428C43v32Ev();
extern void _ZN7S1428C43v33Ev();
extern void _ZN7S1428C43v34Ev();
extern void _ZN7S1428C43v35Ev();
extern void _ZN7S1428C43v36Ev();
extern void _ZN7S1428C43v37Ev();
extern void _ZN7S1428C43v38Ev();
extern void _ZN7S1428C43v39Ev();
extern void _ZN7S1428C43v40Ev();
extern void _ZN7S1428C43v41Ev();
extern void _ZN7S1428C43v42Ev();
extern void _ZN7S1428C43v43Ev();
extern void _ZN7S1428C43v44Ev();
extern void _ZN7S1428C43v45Ev();
extern void _ZN7S1428C43v46Ev();
extern void _ZN7S1428C43v47Ev();
extern void _ZN7S1428C43v48Ev();
extern void _ZN7S1428C43v49Ev();
extern void _ZN7S1428C43v50Ev();
extern void _ZN7S1428C43v51Ev();
extern void _ZN7S1428C43v52Ev();
extern void _ZN7S1428C43v53Ev();
extern void _ZN7S1428C43v54Ev();
extern void _ZN7S1428C43v55Ev();
extern void _ZN7S1428C43v56Ev();
extern void _ZN7S1428C43v57Ev();
extern void _ZN7S1428C43v58Ev();
extern void _ZN7S1428C43v59Ev();
extern void _ZN7S1428C43v60Ev();
extern void _ZN7S1428C43v61Ev();
extern void _ZN7S1428C43v62Ev();
extern void _ZN7S1428C43v63Ev();
extern void _ZN7S1428C43v64Ev();
extern void _ZN7S1428C43v65Ev();
extern void _ZN7S1428C43v66Ev();
extern void _ZN7S1428C43v67Ev();
static  VTBL_ENTRY vtc_S1428C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1428C4[0]),
  (VTBL_ENTRY)&_ZN7S1428C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1428C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v67Ev,
};
extern VTBL_ENTRY _ZTI7S1428C4[];
extern  VTBL_ENTRY _ZTV7S1428C4[];
Class_Descriptor cd_S1428C4 = {  "S1428C4", // class name
  0,0,//no base classes
  &(vtc_S1428C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1428C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1428C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1428C3  : S1428C4 {
  void *s1428c3f0;
  ::S3432C14_nt s1428c3f1;
  int s1428c3f2[5];
  unsigned int s1428c3f3:1;
  unsigned int s1428c3f4:1;
  unsigned int s1428c3f5:1;
  unsigned int s1428c3f6:1;
  unsigned int s1428c3f7:1;
  ::S273C21 s1428c3f8;
  ::S273C17 s1428c3f9;
  unsigned int s1428c3f10:1;
  int s1428c3f11[2];
  void *s1428c3f12;
  int s1428c3f13[3];
  virtual  ~S1428C3(); // _ZN7S1428C3D1Ev
  virtual void  v68(); // _ZN7S1428C33v68Ev
  virtual void  v69(); // _ZN7S1428C33v69Ev
  virtual void  v70(); // _ZN7S1428C33v70Ev
  virtual void  v71(); // _ZN7S1428C33v71Ev
  virtual void  v72(); // _ZN7S1428C33v72Ev
  virtual void  v73(); // _ZN7S1428C33v73Ev
  virtual void  v74(); // _ZN7S1428C33v74Ev
  virtual void  v75(); // _ZN7S1428C33v75Ev
  virtual void  v76(); // _ZN7S1428C33v76Ev
  virtual void  v77(); // _ZN7S1428C33v77Ev
  virtual void  v78(); // _ZN7S1428C33v78Ev
  virtual void  v79(); // _ZN7S1428C33v79Ev
  virtual void  v80(); // _ZN7S1428C33v80Ev
  S1428C3(); // tgen
};
//SIG(-1 S1428C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1428C3 ::~S1428C3(){ note_dtor("S1428C3", this);}
void  S1428C3 ::v68(){vfunc_called(this, "_ZN7S1428C33v68Ev");}
void  S1428C3 ::v69(){vfunc_called(this, "_ZN7S1428C33v69Ev");}
void  S1428C3 ::v70(){vfunc_called(this, "_ZN7S1428C33v70Ev");}
void  S1428C3 ::v71(){vfunc_called(this, "_ZN7S1428C33v71Ev");}
void  S1428C3 ::v72(){vfunc_called(this, "_ZN7S1428C33v72Ev");}
void  S1428C3 ::v73(){vfunc_called(this, "_ZN7S1428C33v73Ev");}
void  S1428C3 ::v74(){vfunc_called(this, "_ZN7S1428C33v74Ev");}
void  S1428C3 ::v75(){vfunc_called(this, "_ZN7S1428C33v75Ev");}
void  S1428C3 ::v76(){vfunc_called(this, "_ZN7S1428C33v76Ev");}
void  S1428C3 ::v77(){vfunc_called(this, "_ZN7S1428C33v77Ev");}
void  S1428C3 ::v78(){vfunc_called(this, "_ZN7S1428C33v78Ev");}
void  S1428C3 ::v79(){vfunc_called(this, "_ZN7S1428C33v79Ev");}
void  S1428C3 ::v80(){vfunc_called(this, "_ZN7S1428C33v80Ev");}
S1428C3 ::S1428C3(){ note_ctor("S1428C3", this);} // tgen

static void Test_S1428C3()
{
  extern Class_Descriptor cd_S1428C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1428C3, buf);
    S1428C3 *dp, &lv = *(dp=new (buf) S1428C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1428C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1428C3)");
    check_base_class_offset(lv, (S1428C4*), 0, "S1428C3");
    check_field_offset(lv, s1428c3f0, ABISELECT(96,60), "S1428C3.s1428c3f0");
    check_field_offset(lv, s1428c3f1, ABISELECT(104,64), "S1428C3.s1428c3f1");
    check_field_offset(lv, s1428c3f2, ABISELECT(112,72), "S1428C3.s1428c3f2");
    set_bf_and_test(lv, s1428c3f3, ABISELECT(132,92), 0, 1, 1, "S1428C3");
    set_bf_and_test(lv, s1428c3f4, ABISELECT(132,92), 1, 1, 1, "S1428C3");
    set_bf_and_test(lv, s1428c3f5, ABISELECT(132,92), 2, 1, 1, "S1428C3");
    set_bf_and_test(lv, s1428c3f6, ABISELECT(132,92), 3, 1, 1, "S1428C3");
    set_bf_and_test(lv, s1428c3f7, ABISELECT(132,92), 4, 1, 1, "S1428C3");
    check_field_offset(lv, s1428c3f8, ABISELECT(136,96), "S1428C3.s1428c3f8");
    check_field_offset(lv, s1428c3f9, ABISELECT(152,108), "S1428C3.s1428c3f9");
    set_bf_and_test(lv, s1428c3f10, ABISELECT(168,120), 0, 1, 1, "S1428C3");
    check_field_offset(lv, s1428c3f11, ABISELECT(172,124), "S1428C3.s1428c3f11");
    check_field_offset(lv, s1428c3f12, ABISELECT(184,132), "S1428C3.s1428c3f12");
    check_field_offset(lv, s1428c3f13, ABISELECT(192,136), "S1428C3.s1428c3f13");
    test_class_info(&lv, &cd_S1428C3);
    dp->~S1428C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1428C3(Test_S1428C3, "S1428C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1428C3C1Ev();
extern void _ZN7S1428C3D1Ev();
Name_Map name_map_S1428C3[] = {
  NSPAIR(_ZN7S1428C3C1Ev),
  NSPAIR(_ZN7S1428C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1428C4;
extern VTBL_ENTRY _ZTI7S1428C4[];
extern  VTBL_ENTRY _ZTV7S1428C4[];
static Base_Class bases_S1428C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1428C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1428C3[];
extern void _ZN7S1428C3D1Ev();
extern void _ZN7S1428C3D0Ev();
extern void _ZN7S1428C42v4Ev();
extern void _ZN7S1428C42v5Ev();
extern void _ZN7S1428C42v6Ev();
extern void _ZN7S1428C42v7Ev();
extern void _ZN7S1428C42v8Ev();
extern void _ZN7S1428C42v9Ev();
extern void _ZN7S1428C43v10Ev();
extern void _ZN7S1428C43v11Ev();
extern void _ZN7S1428C43v12Ev();
extern void _ZN7S1428C43v13Ev();
extern void _ZN7S1428C43v14Ev();
extern void _ZN7S1428C43v15Ev();
extern void _ZN7S1428C43v16Ev();
extern void _ZN7S1428C43v17Ev();
extern void _ZN7S1428C43v18Ev();
extern void _ZN7S1428C43v19Ev();
extern void _ZN7S1428C43v20Ev();
extern void _ZN7S1428C43v21Ev();
extern void _ZN7S1428C43v22Ev();
extern void _ZN7S1428C43v23Ev();
extern void _ZN7S1428C43v24Ev();
extern void _ZN7S1428C43v25Ev();
extern void _ZN7S1428C43v26Ev();
extern void _ZN7S1428C43v27Ev();
extern void _ZN7S1428C43v28Ev();
extern void _ZN7S1428C43v29Ev();
extern void _ZN7S1428C43v30Ev();
extern void _ZN7S1428C43v31Ev();
extern void _ZN7S1428C43v32Ev();
extern void _ZN7S1428C43v33Ev();
extern void _ZN7S1428C43v34Ev();
extern void _ZN7S1428C43v35Ev();
extern void _ZN7S1428C43v36Ev();
extern void _ZN7S1428C43v37Ev();
extern void _ZN7S1428C43v38Ev();
extern void _ZN7S1428C43v39Ev();
extern void _ZN7S1428C43v40Ev();
extern void _ZN7S1428C43v41Ev();
extern void _ZN7S1428C43v42Ev();
extern void _ZN7S1428C43v43Ev();
extern void _ZN7S1428C43v44Ev();
extern void _ZN7S1428C43v45Ev();
extern void _ZN7S1428C43v46Ev();
extern void _ZN7S1428C43v47Ev();
extern void _ZN7S1428C43v48Ev();
extern void _ZN7S1428C43v49Ev();
extern void _ZN7S1428C43v50Ev();
extern void _ZN7S1428C43v51Ev();
extern void _ZN7S1428C43v52Ev();
extern void _ZN7S1428C43v53Ev();
extern void _ZN7S1428C43v54Ev();
extern void _ZN7S1428C43v55Ev();
extern void _ZN7S1428C43v56Ev();
extern void _ZN7S1428C43v57Ev();
extern void _ZN7S1428C43v58Ev();
extern void _ZN7S1428C43v59Ev();
extern void _ZN7S1428C43v60Ev();
extern void _ZN7S1428C43v61Ev();
extern void _ZN7S1428C43v62Ev();
extern void _ZN7S1428C43v63Ev();
extern void _ZN7S1428C43v64Ev();
extern void _ZN7S1428C43v65Ev();
extern void _ZN7S1428C43v66Ev();
extern void _ZN7S1428C43v67Ev();
extern void _ZN7S1428C33v68Ev();
extern void _ZN7S1428C33v69Ev();
extern void _ZN7S1428C33v70Ev();
extern void _ZN7S1428C33v71Ev();
extern void _ZN7S1428C33v72Ev();
extern void _ZN7S1428C33v73Ev();
extern void _ZN7S1428C33v74Ev();
extern void _ZN7S1428C33v75Ev();
extern void _ZN7S1428C33v76Ev();
extern void _ZN7S1428C33v77Ev();
extern void _ZN7S1428C33v78Ev();
extern void _ZN7S1428C33v79Ev();
extern void _ZN7S1428C33v80Ev();
static  VTBL_ENTRY vtc_S1428C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1428C3[0]),
  (VTBL_ENTRY)&_ZN7S1428C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1428C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S1428C3[];
extern  VTBL_ENTRY _ZTV7S1428C3[];
Class_Descriptor cd_S1428C3 = {  "S1428C3", // class name
  bases_S1428C3, 1,
  &(vtc_S1428C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1428C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1428C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1428C2  : S1428C3 {
  unsigned int s1428c2f0:1;
  unsigned int s1428c2f1:1;
  unsigned int s1428c2f2:1;
  unsigned int s1428c2f3:1;
  ::S664C12_nt s1428c2f4;
  char s1428c2f5[2];
  ::S3432C14_nt s1428c2f6;
  ::S632C13 s1428c2f7;
  ::S3432C14_nt s1428c2f8;
  virtual  ~S1428C2(); // _ZN7S1428C2D1Ev
  virtual void  v81(); // _ZN7S1428C23v81Ev
  virtual void  v82(); // _ZN7S1428C23v82Ev
  virtual void  v83(); // _ZN7S1428C23v83Ev
  virtual void  v84(); // _ZN7S1428C23v84Ev
  virtual void  v85(); // _ZN7S1428C23v85Ev
  virtual void  v86(); // _ZN7S1428C23v86Ev
  virtual void  v87(); // _ZN7S1428C23v87Ev
  S1428C2(); // tgen
};
//SIG(-1 S1428C2) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S1428C2 ::~S1428C2(){ note_dtor("S1428C2", this);}
void  S1428C2 ::v81(){vfunc_called(this, "_ZN7S1428C23v81Ev");}
void  S1428C2 ::v82(){vfunc_called(this, "_ZN7S1428C23v82Ev");}
void  S1428C2 ::v83(){vfunc_called(this, "_ZN7S1428C23v83Ev");}
void  S1428C2 ::v84(){vfunc_called(this, "_ZN7S1428C23v84Ev");}
void  S1428C2 ::v85(){vfunc_called(this, "_ZN7S1428C23v85Ev");}
void  S1428C2 ::v86(){vfunc_called(this, "_ZN7S1428C23v86Ev");}
void  S1428C2 ::v87(){vfunc_called(this, "_ZN7S1428C23v87Ev");}
S1428C2 ::S1428C2(){ note_ctor("S1428C2", this);} // tgen

static void Test_S1428C2()
{
  extern Class_Descriptor cd_S1428C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1428C2, buf);
    S1428C2 *dp, &lv = *(dp=new (buf) S1428C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1428C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1428C2)");
    check_base_class_offset(lv, (S1428C4*)(S1428C3*), 0, "S1428C2");
    check_base_class_offset(lv, (S1428C3*), 0, "S1428C2");
    set_bf_and_test(lv, s1428c2f0, ABISELECT(204,148), 0, 1, 1, "S1428C2");
    set_bf_and_test(lv, s1428c2f1, ABISELECT(204,148), 1, 1, 1, "S1428C2");
    set_bf_and_test(lv, s1428c2f2, ABISELECT(204,148), 2, 1, 1, "S1428C2");
    set_bf_and_test(lv, s1428c2f3, ABISELECT(204,148), 3, 1, 1, "S1428C2");
    check_field_offset(lv, s1428c2f4, ABISELECT(208,152), "S1428C2.s1428c2f4");
    check_field_offset(lv, s1428c2f5, ABISELECT(220,164), "S1428C2.s1428c2f5");
    check_field_offset(lv, s1428c2f6, ABISELECT(224,168), "S1428C2.s1428c2f6");
    check_field_offset(lv, s1428c2f7, ABISELECT(232,176), "S1428C2.s1428c2f7");
    check_field_offset(lv, s1428c2f8, ABISELECT(244,188), "S1428C2.s1428c2f8");
    test_class_info(&lv, &cd_S1428C2);
    dp->~S1428C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1428C2(Test_S1428C2, "S1428C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1428C2C1Ev();
extern void _ZN7S1428C2D1Ev();
Name_Map name_map_S1428C2[] = {
  NSPAIR(_ZN7S1428C2C1Ev),
  NSPAIR(_ZN7S1428C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1428C4;
extern VTBL_ENTRY _ZTI7S1428C4[];
extern  VTBL_ENTRY _ZTV7S1428C4[];
extern Class_Descriptor cd_S1428C3;
extern VTBL_ENTRY _ZTI7S1428C3[];
extern  VTBL_ENTRY _ZTV7S1428C3[];
static Base_Class bases_S1428C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1428C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1428C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1428C2[];
extern void _ZN7S1428C2D1Ev();
extern void _ZN7S1428C2D0Ev();
extern void _ZN7S1428C42v4Ev();
extern void _ZN7S1428C42v5Ev();
extern void _ZN7S1428C42v6Ev();
extern void _ZN7S1428C42v7Ev();
extern void _ZN7S1428C42v8Ev();
extern void _ZN7S1428C42v9Ev();
extern void _ZN7S1428C43v10Ev();
extern void _ZN7S1428C43v11Ev();
extern void _ZN7S1428C43v12Ev();
extern void _ZN7S1428C43v13Ev();
extern void _ZN7S1428C43v14Ev();
extern void _ZN7S1428C43v15Ev();
extern void _ZN7S1428C43v16Ev();
extern void _ZN7S1428C43v17Ev();
extern void _ZN7S1428C43v18Ev();
extern void _ZN7S1428C43v19Ev();
extern void _ZN7S1428C43v20Ev();
extern void _ZN7S1428C43v21Ev();
extern void _ZN7S1428C43v22Ev();
extern void _ZN7S1428C43v23Ev();
extern void _ZN7S1428C43v24Ev();
extern void _ZN7S1428C43v25Ev();
extern void _ZN7S1428C43v26Ev();
extern void _ZN7S1428C43v27Ev();
extern void _ZN7S1428C43v28Ev();
extern void _ZN7S1428C43v29Ev();
extern void _ZN7S1428C43v30Ev();
extern void _ZN7S1428C43v31Ev();
extern void _ZN7S1428C43v32Ev();
extern void _ZN7S1428C43v33Ev();
extern void _ZN7S1428C43v34Ev();
extern void _ZN7S1428C43v35Ev();
extern void _ZN7S1428C43v36Ev();
extern void _ZN7S1428C43v37Ev();
extern void _ZN7S1428C43v38Ev();
extern void _ZN7S1428C43v39Ev();
extern void _ZN7S1428C43v40Ev();
extern void _ZN7S1428C43v41Ev();
extern void _ZN7S1428C43v42Ev();
extern void _ZN7S1428C43v43Ev();
extern void _ZN7S1428C43v44Ev();
extern void _ZN7S1428C43v45Ev();
extern void _ZN7S1428C43v46Ev();
extern void _ZN7S1428C43v47Ev();
extern void _ZN7S1428C43v48Ev();
extern void _ZN7S1428C43v49Ev();
extern void _ZN7S1428C43v50Ev();
extern void _ZN7S1428C43v51Ev();
extern void _ZN7S1428C43v52Ev();
extern void _ZN7S1428C43v53Ev();
extern void _ZN7S1428C43v54Ev();
extern void _ZN7S1428C43v55Ev();
extern void _ZN7S1428C43v56Ev();
extern void _ZN7S1428C43v57Ev();
extern void _ZN7S1428C43v58Ev();
extern void _ZN7S1428C43v59Ev();
extern void _ZN7S1428C43v60Ev();
extern void _ZN7S1428C43v61Ev();
extern void _ZN7S1428C43v62Ev();
extern void _ZN7S1428C43v63Ev();
extern void _ZN7S1428C43v64Ev();
extern void _ZN7S1428C43v65Ev();
extern void _ZN7S1428C43v66Ev();
extern void _ZN7S1428C43v67Ev();
extern void _ZN7S1428C33v68Ev();
extern void _ZN7S1428C33v69Ev();
extern void _ZN7S1428C33v70Ev();
extern void _ZN7S1428C33v71Ev();
extern void _ZN7S1428C33v72Ev();
extern void _ZN7S1428C33v73Ev();
extern void _ZN7S1428C33v74Ev();
extern void _ZN7S1428C33v75Ev();
extern void _ZN7S1428C33v76Ev();
extern void _ZN7S1428C33v77Ev();
extern void _ZN7S1428C33v78Ev();
extern void _ZN7S1428C33v79Ev();
extern void _ZN7S1428C33v80Ev();
extern void _ZN7S1428C23v81Ev();
extern void _ZN7S1428C23v82Ev();
extern void _ZN7S1428C23v83Ev();
extern void _ZN7S1428C23v84Ev();
extern void _ZN7S1428C23v85Ev();
extern void _ZN7S1428C23v86Ev();
extern void _ZN7S1428C23v87Ev();
static  VTBL_ENTRY vtc_S1428C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1428C2[0]),
  (VTBL_ENTRY)&_ZN7S1428C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1428C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1428C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1428C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1428C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1428C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1428C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1428C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1428C23v87Ev,
};
extern VTBL_ENTRY _ZTI7S1428C2[];
extern  VTBL_ENTRY _ZTV7S1428C2[];
Class_Descriptor cd_S1428C2 = {  "S1428C2", // class name
  bases_S1428C2, 2,
  &(vtc_S1428C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1428C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1428C2),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1428C1  : S1428C2 {
  int s1428c1f0[2];
  unsigned int s1428c1f1:1;
  virtual  ~S1428C1(); // _ZN7S1428C1D1Ev
  virtual void  v1(); // _ZN7S1428C12v1Ev
  virtual void  v2(); // _ZN7S1428C12v2Ev
  virtual void  v3(); // _ZN7S1428C12v3Ev
  S1428C1(); // tgen
};
//SIG(1 S1428C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 Fi[2] Fi:1}


 S1428C1 ::~S1428C1(){ note_dtor("S1428C1", this);}
void  S1428C1 ::v1(){vfunc_called(this, "_ZN7S1428C12v1Ev");}
void  S1428C1 ::v2(){vfunc_called(this, "_ZN7S1428C12v2Ev");}
void  S1428C1 ::v3(){vfunc_called(this, "_ZN7S1428C12v3Ev");}
S1428C1 ::S1428C1(){ note_ctor("S1428C1", this);} // tgen

static void Test_S1428C1()
{
  extern Class_Descriptor cd_S1428C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,53)];
    init_test(&cd_S1428C1, buf);
    S1428C1 *dp, &lv = *(dp=new (buf) S1428C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,208), "sizeof(S1428C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1428C1)");
    check_base_class_offset(lv, (S1428C4*)(S1428C3*)(S1428C2*), 0, "S1428C1");
    check_base_class_offset(lv, (S1428C3*)(S1428C2*), 0, "S1428C1");
    check_base_class_offset(lv, (S1428C2*), 0, "S1428C1");
    check_field_offset(lv, s1428c1f0, ABISELECT(252,196), "S1428C1.s1428c1f0");
    set_bf_and_test(lv, s1428c1f1, ABISELECT(260,204), 0, 1, 1, "S1428C1");
    test_class_info(&lv, &cd_S1428C1);
    dp->~S1428C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1428C1(Test_S1428C1, "S1428C1", ABISELECT(264,208));

#else // __cplusplus

extern void _ZN7S1428C1C1Ev();
extern void _ZN7S1428C1D1Ev();
Name_Map name_map_S1428C1[] = {
  NSPAIR(_ZN7S1428C1C1Ev),
  NSPAIR(_ZN7S1428C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1428C4;
extern VTBL_ENTRY _ZTI7S1428C4[];
extern  VTBL_ENTRY _ZTV7S1428C4[];
extern Class_Descriptor cd_S1428C3;
extern VTBL_ENTRY _ZTI7S1428C3[];
extern  VTBL_ENTRY _ZTV7S1428C3[];
extern Class_Descriptor cd_S1428C2;
extern VTBL_ENTRY _ZTI7S1428C2[];
extern  VTBL_ENTRY _ZTV7S1428C2[];
static Base_Class bases_S1428C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1428C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1428C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1428C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1428C1[];
extern void _ZN7S1428C1D1Ev();
extern void _ZN7S1428C1D0Ev();
extern void _ZN7S1428C42v4Ev();
extern void _ZN7S1428C42v5Ev();
extern void _ZN7S1428C42v6Ev();
extern void _ZN7S1428C42v7Ev();
extern void _ZN7S1428C42v8Ev();
extern void _ZN7S1428C42v9Ev();
extern void _ZN7S1428C43v10Ev();
extern void _ZN7S1428C43v11Ev();
extern void _ZN7S1428C43v12Ev();
extern void _ZN7S1428C43v13Ev();
extern void _ZN7S1428C43v14Ev();
extern void _ZN7S1428C43v15Ev();
extern void _ZN7S1428C43v16Ev();
extern void _ZN7S1428C43v17Ev();
extern void _ZN7S1428C43v18Ev();
extern void _ZN7S1428C43v19Ev();
extern void _ZN7S1428C43v20Ev();
extern void _ZN7S1428C43v21Ev();
extern void _ZN7S1428C43v22Ev();
extern void _ZN7S1428C43v23Ev();
extern void _ZN7S1428C43v24Ev();
extern void _ZN7S1428C43v25Ev();
extern void _ZN7S1428C43v26Ev();
extern void _ZN7S1428C43v27Ev();
extern void _ZN7S1428C43v28Ev();
extern void _ZN7S1428C43v29Ev();
extern void _ZN7S1428C43v30Ev();
extern void _ZN7S1428C43v31Ev();
extern void _ZN7S1428C43v32Ev();
extern void _ZN7S1428C43v33Ev();
extern void _ZN7S1428C43v34Ev();
extern void _ZN7S1428C43v35Ev();
extern void _ZN7S1428C43v36Ev();
extern void _ZN7S1428C43v37Ev();
extern void _ZN7S1428C43v38Ev();
extern void _ZN7S1428C43v39Ev();
extern void _ZN7S1428C43v40Ev();
extern void _ZN7S1428C43v41Ev();
extern void _ZN7S1428C43v42Ev();
extern void _ZN7S1428C43v43Ev();
extern void _ZN7S1428C43v44Ev();
extern void _ZN7S1428C43v45Ev();
extern void _ZN7S1428C43v46Ev();
extern void _ZN7S1428C43v47Ev();
extern void _ZN7S1428C43v48Ev();
extern void _ZN7S1428C43v49Ev();
extern void _ZN7S1428C43v50Ev();
extern void _ZN7S1428C43v51Ev();
extern void _ZN7S1428C43v52Ev();
extern void _ZN7S1428C43v53Ev();
extern void _ZN7S1428C43v54Ev();
extern void _ZN7S1428C43v55Ev();
extern void _ZN7S1428C43v56Ev();
extern void _ZN7S1428C43v57Ev();
extern void _ZN7S1428C43v58Ev();
extern void _ZN7S1428C43v59Ev();
extern void _ZN7S1428C43v60Ev();
extern void _ZN7S1428C43v61Ev();
extern void _ZN7S1428C43v62Ev();
extern void _ZN7S1428C43v63Ev();
extern void _ZN7S1428C43v64Ev();
extern void _ZN7S1428C43v65Ev();
extern void _ZN7S1428C43v66Ev();
extern void _ZN7S1428C43v67Ev();
extern void _ZN7S1428C33v68Ev();
extern void _ZN7S1428C33v69Ev();
extern void _ZN7S1428C33v70Ev();
extern void _ZN7S1428C33v71Ev();
extern void _ZN7S1428C33v72Ev();
extern void _ZN7S1428C33v73Ev();
extern void _ZN7S1428C33v74Ev();
extern void _ZN7S1428C33v75Ev();
extern void _ZN7S1428C33v76Ev();
extern void _ZN7S1428C33v77Ev();
extern void _ZN7S1428C33v78Ev();
extern void _ZN7S1428C33v79Ev();
extern void _ZN7S1428C33v80Ev();
extern void _ZN7S1428C23v81Ev();
extern void _ZN7S1428C23v82Ev();
extern void _ZN7S1428C23v83Ev();
extern void _ZN7S1428C23v84Ev();
extern void _ZN7S1428C23v85Ev();
extern void _ZN7S1428C23v86Ev();
extern void _ZN7S1428C23v87Ev();
extern void _ZN7S1428C12v1Ev();
extern void _ZN7S1428C12v2Ev();
extern void _ZN7S1428C12v3Ev();
static  VTBL_ENTRY vtc_S1428C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1428C1[0]),
  (VTBL_ENTRY)&_ZN7S1428C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1428C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1428C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1428C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1428C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1428C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1428C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1428C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1428C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1428C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1428C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1428C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1428C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1428C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1428C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1428C1[];
extern  VTBL_ENTRY _ZTV7S1428C1[];
Class_Descriptor cd_S1428C1 = {  "S1428C1", // class name
  bases_S1428C1, 3,
  &(vtc_S1428C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,208), // object size
  NSPAIRA(_ZTI7S1428C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1428C1),91, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1469C4  {
  int s1469c4f0;
  __tsi64 s1469c4f1;
  void *s1469c4f2[4];
  int s1469c4f3[2];
  void *s1469c4f4;
  ::S3432C14_nt s1469c4f5;
  void *s1469c4f6[2];
  virtual  ~S1469C4(); // _ZN7S1469C4D1Ev
  virtual void  v5(); // _ZN7S1469C42v5Ev
  virtual void  v6(); // _ZN7S1469C42v6Ev
  virtual void  v7(); // _ZN7S1469C42v7Ev
  virtual void  v8(); // _ZN7S1469C42v8Ev
  virtual void  v9(); // _ZN7S1469C42v9Ev
  virtual void  v10(); // _ZN7S1469C43v10Ev
  virtual void  v11(); // _ZN7S1469C43v11Ev
  virtual void  v12(); // _ZN7S1469C43v12Ev
  virtual void  v13(); // _ZN7S1469C43v13Ev
  virtual void  v14(); // _ZN7S1469C43v14Ev
  virtual void  v15(); // _ZN7S1469C43v15Ev
  virtual void  v16(); // _ZN7S1469C43v16Ev
  virtual void  v17(); // _ZN7S1469C43v17Ev
  virtual void  v18(); // _ZN7S1469C43v18Ev
  virtual void  v19(); // _ZN7S1469C43v19Ev
  virtual void  v20(); // _ZN7S1469C43v20Ev
  virtual void  v21(); // _ZN7S1469C43v21Ev
  virtual void  v22(); // _ZN7S1469C43v22Ev
  virtual void  v23(); // _ZN7S1469C43v23Ev
  virtual void  v24(); // _ZN7S1469C43v24Ev
  virtual void  v25(); // _ZN7S1469C43v25Ev
  virtual void  v26(); // _ZN7S1469C43v26Ev
  virtual void  v27(); // _ZN7S1469C43v27Ev
  virtual void  v28(); // _ZN7S1469C43v28Ev
  virtual void  v29(); // _ZN7S1469C43v29Ev
  virtual void  v30(); // _ZN7S1469C43v30Ev
  virtual void  v31(); // _ZN7S1469C43v31Ev
  virtual void  v32(); // _ZN7S1469C43v32Ev
  virtual void  v33(); // _ZN7S1469C43v33Ev
  virtual void  v34(); // _ZN7S1469C43v34Ev
  virtual void  v35(); // _ZN7S1469C43v35Ev
  virtual void  v36(); // _ZN7S1469C43v36Ev
  virtual void  v37(); // _ZN7S1469C43v37Ev
  virtual void  v38(); // _ZN7S1469C43v38Ev
  virtual void  v39(); // _ZN7S1469C43v39Ev
  virtual void  v40(); // _ZN7S1469C43v40Ev
  virtual void  v41(); // _ZN7S1469C43v41Ev
  virtual void  v42(); // _ZN7S1469C43v42Ev
  virtual void  v43(); // _ZN7S1469C43v43Ev
  virtual void  v44(); // _ZN7S1469C43v44Ev
  virtual void  v45(); // _ZN7S1469C43v45Ev
  virtual void  v46(); // _ZN7S1469C43v46Ev
  virtual void  v47(); // _ZN7S1469C43v47Ev
  virtual void  v48(); // _ZN7S1469C43v48Ev
  virtual void  v49(); // _ZN7S1469C43v49Ev
  virtual void  v50(); // _ZN7S1469C43v50Ev
  virtual void  v51(); // _ZN7S1469C43v51Ev
  virtual void  v52(); // _ZN7S1469C43v52Ev
  virtual void  v53(); // _ZN7S1469C43v53Ev
  virtual void  v54(); // _ZN7S1469C43v54Ev
  virtual void  v55(); // _ZN7S1469C43v55Ev
  virtual void  v56(); // _ZN7S1469C43v56Ev
  virtual void  v57(); // _ZN7S1469C43v57Ev
  virtual void  v58(); // _ZN7S1469C43v58Ev
  virtual void  v59(); // _ZN7S1469C43v59Ev
  virtual void  v60(); // _ZN7S1469C43v60Ev
  virtual void  v61(); // _ZN7S1469C43v61Ev
  virtual void  v62(); // _ZN7S1469C43v62Ev
  virtual void  v63(); // _ZN7S1469C43v63Ev
  virtual void  v64(); // _ZN7S1469C43v64Ev
  virtual void  v65(); // _ZN7S1469C43v65Ev
  virtual void  v66(); // _ZN7S1469C43v66Ev
  virtual void  v67(); // _ZN7S1469C43v67Ev
  virtual void  v68(); // _ZN7S1469C43v68Ev
  S1469C4(); // tgen
};
//SIG(-1 S1469C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1469C4 ::~S1469C4(){ note_dtor("S1469C4", this);}
void  S1469C4 ::v5(){vfunc_called(this, "_ZN7S1469C42v5Ev");}
void  S1469C4 ::v6(){vfunc_called(this, "_ZN7S1469C42v6Ev");}
void  S1469C4 ::v7(){vfunc_called(this, "_ZN7S1469C42v7Ev");}
void  S1469C4 ::v8(){vfunc_called(this, "_ZN7S1469C42v8Ev");}
void  S1469C4 ::v9(){vfunc_called(this, "_ZN7S1469C42v9Ev");}
void  S1469C4 ::v10(){vfunc_called(this, "_ZN7S1469C43v10Ev");}
void  S1469C4 ::v11(){vfunc_called(this, "_ZN7S1469C43v11Ev");}
void  S1469C4 ::v12(){vfunc_called(this, "_ZN7S1469C43v12Ev");}
void  S1469C4 ::v13(){vfunc_called(this, "_ZN7S1469C43v13Ev");}
void  S1469C4 ::v14(){vfunc_called(this, "_ZN7S1469C43v14Ev");}
void  S1469C4 ::v15(){vfunc_called(this, "_ZN7S1469C43v15Ev");}
void  S1469C4 ::v16(){vfunc_called(this, "_ZN7S1469C43v16Ev");}
void  S1469C4 ::v17(){vfunc_called(this, "_ZN7S1469C43v17Ev");}
void  S1469C4 ::v18(){vfunc_called(this, "_ZN7S1469C43v18Ev");}
void  S1469C4 ::v19(){vfunc_called(this, "_ZN7S1469C43v19Ev");}
void  S1469C4 ::v20(){vfunc_called(this, "_ZN7S1469C43v20Ev");}
void  S1469C4 ::v21(){vfunc_called(this, "_ZN7S1469C43v21Ev");}
void  S1469C4 ::v22(){vfunc_called(this, "_ZN7S1469C43v22Ev");}
void  S1469C4 ::v23(){vfunc_called(this, "_ZN7S1469C43v23Ev");}
void  S1469C4 ::v24(){vfunc_called(this, "_ZN7S1469C43v24Ev");}
void  S1469C4 ::v25(){vfunc_called(this, "_ZN7S1469C43v25Ev");}
void  S1469C4 ::v26(){vfunc_called(this, "_ZN7S1469C43v26Ev");}
void  S1469C4 ::v27(){vfunc_called(this, "_ZN7S1469C43v27Ev");}
void  S1469C4 ::v28(){vfunc_called(this, "_ZN7S1469C43v28Ev");}
void  S1469C4 ::v29(){vfunc_called(this, "_ZN7S1469C43v29Ev");}
void  S1469C4 ::v30(){vfunc_called(this, "_ZN7S1469C43v30Ev");}
void  S1469C4 ::v31(){vfunc_called(this, "_ZN7S1469C43v31Ev");}
void  S1469C4 ::v32(){vfunc_called(this, "_ZN7S1469C43v32Ev");}
void  S1469C4 ::v33(){vfunc_called(this, "_ZN7S1469C43v33Ev");}
void  S1469C4 ::v34(){vfunc_called(this, "_ZN7S1469C43v34Ev");}
void  S1469C4 ::v35(){vfunc_called(this, "_ZN7S1469C43v35Ev");}
void  S1469C4 ::v36(){vfunc_called(this, "_ZN7S1469C43v36Ev");}
void  S1469C4 ::v37(){vfunc_called(this, "_ZN7S1469C43v37Ev");}
void  S1469C4 ::v38(){vfunc_called(this, "_ZN7S1469C43v38Ev");}
void  S1469C4 ::v39(){vfunc_called(this, "_ZN7S1469C43v39Ev");}
void  S1469C4 ::v40(){vfunc_called(this, "_ZN7S1469C43v40Ev");}
void  S1469C4 ::v41(){vfunc_called(this, "_ZN7S1469C43v41Ev");}
void  S1469C4 ::v42(){vfunc_called(this, "_ZN7S1469C43v42Ev");}
void  S1469C4 ::v43(){vfunc_called(this, "_ZN7S1469C43v43Ev");}
void  S1469C4 ::v44(){vfunc_called(this, "_ZN7S1469C43v44Ev");}
void  S1469C4 ::v45(){vfunc_called(this, "_ZN7S1469C43v45Ev");}
void  S1469C4 ::v46(){vfunc_called(this, "_ZN7S1469C43v46Ev");}
void  S1469C4 ::v47(){vfunc_called(this, "_ZN7S1469C43v47Ev");}
void  S1469C4 ::v48(){vfunc_called(this, "_ZN7S1469C43v48Ev");}
void  S1469C4 ::v49(){vfunc_called(this, "_ZN7S1469C43v49Ev");}
void  S1469C4 ::v50(){vfunc_called(this, "_ZN7S1469C43v50Ev");}
void  S1469C4 ::v51(){vfunc_called(this, "_ZN7S1469C43v51Ev");}
void  S1469C4 ::v52(){vfunc_called(this, "_ZN7S1469C43v52Ev");}
void  S1469C4 ::v53(){vfunc_called(this, "_ZN7S1469C43v53Ev");}
void  S1469C4 ::v54(){vfunc_called(this, "_ZN7S1469C43v54Ev");}
void  S1469C4 ::v55(){vfunc_called(this, "_ZN7S1469C43v55Ev");}
void  S1469C4 ::v56(){vfunc_called(this, "_ZN7S1469C43v56Ev");}
void  S1469C4 ::v57(){vfunc_called(this, "_ZN7S1469C43v57Ev");}
void  S1469C4 ::v58(){vfunc_called(this, "_ZN7S1469C43v58Ev");}
void  S1469C4 ::v59(){vfunc_called(this, "_ZN7S1469C43v59Ev");}
void  S1469C4 ::v60(){vfunc_called(this, "_ZN7S1469C43v60Ev");}
void  S1469C4 ::v61(){vfunc_called(this, "_ZN7S1469C43v61Ev");}
void  S1469C4 ::v62(){vfunc_called(this, "_ZN7S1469C43v62Ev");}
void  S1469C4 ::v63(){vfunc_called(this, "_ZN7S1469C43v63Ev");}
void  S1469C4 ::v64(){vfunc_called(this, "_ZN7S1469C43v64Ev");}
void  S1469C4 ::v65(){vfunc_called(this, "_ZN7S1469C43v65Ev");}
void  S1469C4 ::v66(){vfunc_called(this, "_ZN7S1469C43v66Ev");}
void  S1469C4 ::v67(){vfunc_called(this, "_ZN7S1469C43v67Ev");}
void  S1469C4 ::v68(){vfunc_called(this, "_ZN7S1469C43v68Ev");}
S1469C4 ::S1469C4(){ note_ctor("S1469C4", this);} // tgen

static void Test_S1469C4()
{
  extern Class_Descriptor cd_S1469C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1469C4, buf);
    S1469C4 *dp, &lv = *(dp=new (buf) S1469C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1469C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1469C4)");
    check_field_offset(lv, s1469c4f0, ABISELECT(8,4), "S1469C4.s1469c4f0");
    check_field_offset(lv, s1469c4f1, ABISELECT(16,8), "S1469C4.s1469c4f1");
    check_field_offset(lv, s1469c4f2, ABISELECT(24,16), "S1469C4.s1469c4f2");
    check_field_offset(lv, s1469c4f3, ABISELECT(56,32), "S1469C4.s1469c4f3");
    check_field_offset(lv, s1469c4f4, ABISELECT(64,40), "S1469C4.s1469c4f4");
    check_field_offset(lv, s1469c4f5, ABISELECT(72,44), "S1469C4.s1469c4f5");
    check_field_offset(lv, s1469c4f6, ABISELECT(80,52), "S1469C4.s1469c4f6");
    test_class_info(&lv, &cd_S1469C4);
    dp->~S1469C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1469C4(Test_S1469C4, "S1469C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1469C4C1Ev();
extern void _ZN7S1469C4D1Ev();
Name_Map name_map_S1469C4[] = {
  NSPAIR(_ZN7S1469C4C1Ev),
  NSPAIR(_ZN7S1469C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1469C4[];
extern void _ZN7S1469C4D1Ev();
extern void _ZN7S1469C4D0Ev();
extern void _ZN7S1469C42v5Ev();
extern void _ZN7S1469C42v6Ev();
extern void _ZN7S1469C42v7Ev();
extern void _ZN7S1469C42v8Ev();
extern void _ZN7S1469C42v9Ev();
extern void _ZN7S1469C43v10Ev();
extern void _ZN7S1469C43v11Ev();
extern void _ZN7S1469C43v12Ev();
extern void _ZN7S1469C43v13Ev();
extern void _ZN7S1469C43v14Ev();
extern void _ZN7S1469C43v15Ev();
extern void _ZN7S1469C43v16Ev();
extern void _ZN7S1469C43v17Ev();
extern void _ZN7S1469C43v18Ev();
extern void _ZN7S1469C43v19Ev();
extern void _ZN7S1469C43v20Ev();
extern void _ZN7S1469C43v21Ev();
extern void _ZN7S1469C43v22Ev();
extern void _ZN7S1469C43v23Ev();
extern void _ZN7S1469C43v24Ev();
extern void _ZN7S1469C43v25Ev();
extern void _ZN7S1469C43v26Ev();
extern void _ZN7S1469C43v27Ev();
extern void _ZN7S1469C43v28Ev();
extern void _ZN7S1469C43v29Ev();
extern void _ZN7S1469C43v30Ev();
extern void _ZN7S1469C43v31Ev();
extern void _ZN7S1469C43v32Ev();
extern void _ZN7S1469C43v33Ev();
extern void _ZN7S1469C43v34Ev();
extern void _ZN7S1469C43v35Ev();
extern void _ZN7S1469C43v36Ev();
extern void _ZN7S1469C43v37Ev();
extern void _ZN7S1469C43v38Ev();
extern void _ZN7S1469C43v39Ev();
extern void _ZN7S1469C43v40Ev();
extern void _ZN7S1469C43v41Ev();
extern void _ZN7S1469C43v42Ev();
extern void _ZN7S1469C43v43Ev();
extern void _ZN7S1469C43v44Ev();
extern void _ZN7S1469C43v45Ev();
extern void _ZN7S1469C43v46Ev();
extern void _ZN7S1469C43v47Ev();
extern void _ZN7S1469C43v48Ev();
extern void _ZN7S1469C43v49Ev();
extern void _ZN7S1469C43v50Ev();
extern void _ZN7S1469C43v51Ev();
extern void _ZN7S1469C43v52Ev();
extern void _ZN7S1469C43v53Ev();
extern void _ZN7S1469C43v54Ev();
extern void _ZN7S1469C43v55Ev();
extern void _ZN7S1469C43v56Ev();
extern void _ZN7S1469C43v57Ev();
extern void _ZN7S1469C43v58Ev();
extern void _ZN7S1469C43v59Ev();
extern void _ZN7S1469C43v60Ev();
extern void _ZN7S1469C43v61Ev();
extern void _ZN7S1469C43v62Ev();
extern void _ZN7S1469C43v63Ev();
extern void _ZN7S1469C43v64Ev();
extern void _ZN7S1469C43v65Ev();
extern void _ZN7S1469C43v66Ev();
extern void _ZN7S1469C43v67Ev();
extern void _ZN7S1469C43v68Ev();
static  VTBL_ENTRY vtc_S1469C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1469C4[0]),
  (VTBL_ENTRY)&_ZN7S1469C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1469C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v68Ev,
};
extern VTBL_ENTRY _ZTI7S1469C4[];
extern  VTBL_ENTRY _ZTV7S1469C4[];
Class_Descriptor cd_S1469C4 = {  "S1469C4", // class name
  0,0,//no base classes
  &(vtc_S1469C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1469C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1469C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1469C3  : S1469C4 {
  void *s1469c3f0;
  ::S3432C14_nt s1469c3f1;
  int s1469c3f2[5];
  unsigned int s1469c3f3:1;
  unsigned int s1469c3f4:1;
  unsigned int s1469c3f5:1;
  unsigned int s1469c3f6:1;
  unsigned int s1469c3f7:1;
  ::S273C21 s1469c3f8;
  ::S273C17 s1469c3f9;
  unsigned int s1469c3f10:1;
  int s1469c3f11[2];
  void *s1469c3f12;
  int s1469c3f13[3];
  virtual  ~S1469C3(); // _ZN7S1469C3D1Ev
  virtual void  v69(); // _ZN7S1469C33v69Ev
  virtual void  v70(); // _ZN7S1469C33v70Ev
  virtual void  v71(); // _ZN7S1469C33v71Ev
  virtual void  v72(); // _ZN7S1469C33v72Ev
  virtual void  v73(); // _ZN7S1469C33v73Ev
  virtual void  v74(); // _ZN7S1469C33v74Ev
  virtual void  v75(); // _ZN7S1469C33v75Ev
  virtual void  v76(); // _ZN7S1469C33v76Ev
  virtual void  v77(); // _ZN7S1469C33v77Ev
  virtual void  v78(); // _ZN7S1469C33v78Ev
  virtual void  v79(); // _ZN7S1469C33v79Ev
  virtual void  v80(); // _ZN7S1469C33v80Ev
  virtual void  v81(); // _ZN7S1469C33v81Ev
  S1469C3(); // tgen
};
//SIG(-1 S1469C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1469C3 ::~S1469C3(){ note_dtor("S1469C3", this);}
void  S1469C3 ::v69(){vfunc_called(this, "_ZN7S1469C33v69Ev");}
void  S1469C3 ::v70(){vfunc_called(this, "_ZN7S1469C33v70Ev");}
void  S1469C3 ::v71(){vfunc_called(this, "_ZN7S1469C33v71Ev");}
void  S1469C3 ::v72(){vfunc_called(this, "_ZN7S1469C33v72Ev");}
void  S1469C3 ::v73(){vfunc_called(this, "_ZN7S1469C33v73Ev");}
void  S1469C3 ::v74(){vfunc_called(this, "_ZN7S1469C33v74Ev");}
void  S1469C3 ::v75(){vfunc_called(this, "_ZN7S1469C33v75Ev");}
void  S1469C3 ::v76(){vfunc_called(this, "_ZN7S1469C33v76Ev");}
void  S1469C3 ::v77(){vfunc_called(this, "_ZN7S1469C33v77Ev");}
void  S1469C3 ::v78(){vfunc_called(this, "_ZN7S1469C33v78Ev");}
void  S1469C3 ::v79(){vfunc_called(this, "_ZN7S1469C33v79Ev");}
void  S1469C3 ::v80(){vfunc_called(this, "_ZN7S1469C33v80Ev");}
void  S1469C3 ::v81(){vfunc_called(this, "_ZN7S1469C33v81Ev");}
S1469C3 ::S1469C3(){ note_ctor("S1469C3", this);} // tgen

static void Test_S1469C3()
{
  extern Class_Descriptor cd_S1469C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1469C3, buf);
    S1469C3 *dp, &lv = *(dp=new (buf) S1469C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1469C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1469C3)");
    check_base_class_offset(lv, (S1469C4*), 0, "S1469C3");
    check_field_offset(lv, s1469c3f0, ABISELECT(96,60), "S1469C3.s1469c3f0");
    check_field_offset(lv, s1469c3f1, ABISELECT(104,64), "S1469C3.s1469c3f1");
    check_field_offset(lv, s1469c3f2, ABISELECT(112,72), "S1469C3.s1469c3f2");
    set_bf_and_test(lv, s1469c3f3, ABISELECT(132,92), 0, 1, 1, "S1469C3");
    set_bf_and_test(lv, s1469c3f4, ABISELECT(132,92), 1, 1, 1, "S1469C3");
    set_bf_and_test(lv, s1469c3f5, ABISELECT(132,92), 2, 1, 1, "S1469C3");
    set_bf_and_test(lv, s1469c3f6, ABISELECT(132,92), 3, 1, 1, "S1469C3");
    set_bf_and_test(lv, s1469c3f7, ABISELECT(132,92), 4, 1, 1, "S1469C3");
    check_field_offset(lv, s1469c3f8, ABISELECT(136,96), "S1469C3.s1469c3f8");
    check_field_offset(lv, s1469c3f9, ABISELECT(152,108), "S1469C3.s1469c3f9");
    set_bf_and_test(lv, s1469c3f10, ABISELECT(168,120), 0, 1, 1, "S1469C3");
    check_field_offset(lv, s1469c3f11, ABISELECT(172,124), "S1469C3.s1469c3f11");
    check_field_offset(lv, s1469c3f12, ABISELECT(184,132), "S1469C3.s1469c3f12");
    check_field_offset(lv, s1469c3f13, ABISELECT(192,136), "S1469C3.s1469c3f13");
    test_class_info(&lv, &cd_S1469C3);
    dp->~S1469C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1469C3(Test_S1469C3, "S1469C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1469C3C1Ev();
extern void _ZN7S1469C3D1Ev();
Name_Map name_map_S1469C3[] = {
  NSPAIR(_ZN7S1469C3C1Ev),
  NSPAIR(_ZN7S1469C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1469C4;
extern VTBL_ENTRY _ZTI7S1469C4[];
extern  VTBL_ENTRY _ZTV7S1469C4[];
static Base_Class bases_S1469C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1469C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1469C3[];
extern void _ZN7S1469C3D1Ev();
extern void _ZN7S1469C3D0Ev();
extern void _ZN7S1469C42v5Ev();
extern void _ZN7S1469C42v6Ev();
extern void _ZN7S1469C42v7Ev();
extern void _ZN7S1469C42v8Ev();
extern void _ZN7S1469C42v9Ev();
extern void _ZN7S1469C43v10Ev();
extern void _ZN7S1469C43v11Ev();
extern void _ZN7S1469C43v12Ev();
extern void _ZN7S1469C43v13Ev();
extern void _ZN7S1469C43v14Ev();
extern void _ZN7S1469C43v15Ev();
extern void _ZN7S1469C43v16Ev();
extern void _ZN7S1469C43v17Ev();
extern void _ZN7S1469C43v18Ev();
extern void _ZN7S1469C43v19Ev();
extern void _ZN7S1469C43v20Ev();
extern void _ZN7S1469C43v21Ev();
extern void _ZN7S1469C43v22Ev();
extern void _ZN7S1469C43v23Ev();
extern void _ZN7S1469C43v24Ev();
extern void _ZN7S1469C43v25Ev();
extern void _ZN7S1469C43v26Ev();
extern void _ZN7S1469C43v27Ev();
extern void _ZN7S1469C43v28Ev();
extern void _ZN7S1469C43v29Ev();
extern void _ZN7S1469C43v30Ev();
extern void _ZN7S1469C43v31Ev();
extern void _ZN7S1469C43v32Ev();
extern void _ZN7S1469C43v33Ev();
extern void _ZN7S1469C43v34Ev();
extern void _ZN7S1469C43v35Ev();
extern void _ZN7S1469C43v36Ev();
extern void _ZN7S1469C43v37Ev();
extern void _ZN7S1469C43v38Ev();
extern void _ZN7S1469C43v39Ev();
extern void _ZN7S1469C43v40Ev();
extern void _ZN7S1469C43v41Ev();
extern void _ZN7S1469C43v42Ev();
extern void _ZN7S1469C43v43Ev();
extern void _ZN7S1469C43v44Ev();
extern void _ZN7S1469C43v45Ev();
extern void _ZN7S1469C43v46Ev();
extern void _ZN7S1469C43v47Ev();
extern void _ZN7S1469C43v48Ev();
extern void _ZN7S1469C43v49Ev();
extern void _ZN7S1469C43v50Ev();
extern void _ZN7S1469C43v51Ev();
extern void _ZN7S1469C43v52Ev();
extern void _ZN7S1469C43v53Ev();
extern void _ZN7S1469C43v54Ev();
extern void _ZN7S1469C43v55Ev();
extern void _ZN7S1469C43v56Ev();
extern void _ZN7S1469C43v57Ev();
extern void _ZN7S1469C43v58Ev();
extern void _ZN7S1469C43v59Ev();
extern void _ZN7S1469C43v60Ev();
extern void _ZN7S1469C43v61Ev();
extern void _ZN7S1469C43v62Ev();
extern void _ZN7S1469C43v63Ev();
extern void _ZN7S1469C43v64Ev();
extern void _ZN7S1469C43v65Ev();
extern void _ZN7S1469C43v66Ev();
extern void _ZN7S1469C43v67Ev();
extern void _ZN7S1469C43v68Ev();
extern void _ZN7S1469C33v69Ev();
extern void _ZN7S1469C33v70Ev();
extern void _ZN7S1469C33v71Ev();
extern void _ZN7S1469C33v72Ev();
extern void _ZN7S1469C33v73Ev();
extern void _ZN7S1469C33v74Ev();
extern void _ZN7S1469C33v75Ev();
extern void _ZN7S1469C33v76Ev();
extern void _ZN7S1469C33v77Ev();
extern void _ZN7S1469C33v78Ev();
extern void _ZN7S1469C33v79Ev();
extern void _ZN7S1469C33v80Ev();
extern void _ZN7S1469C33v81Ev();
static  VTBL_ENTRY vtc_S1469C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1469C3[0]),
  (VTBL_ENTRY)&_ZN7S1469C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1469C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v81Ev,
};
extern VTBL_ENTRY _ZTI7S1469C3[];
extern  VTBL_ENTRY _ZTV7S1469C3[];
Class_Descriptor cd_S1469C3 = {  "S1469C3", // class name
  bases_S1469C3, 1,
  &(vtc_S1469C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1469C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1469C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1469C2  : S1469C3 {
  unsigned int s1469c2f0:1;
  unsigned int s1469c2f1:1;
  unsigned int s1469c2f2:1;
  unsigned int s1469c2f3:1;
  ::S664C12_nt s1469c2f4;
  char s1469c2f5[2];
  ::S3432C14_nt s1469c2f6;
  ::S632C13 s1469c2f7;
  ::S3432C14_nt s1469c2f8;
  virtual  ~S1469C2(); // _ZN7S1469C2D1Ev
  virtual void  v82(); // _ZN7S1469C23v82Ev
  virtual void  v83(); // _ZN7S1469C23v83Ev
  virtual void  v84(); // _ZN7S1469C23v84Ev
  virtual void  v85(); // _ZN7S1469C23v85Ev
  virtual void  v86(); // _ZN7S1469C23v86Ev
  virtual void  v87(); // _ZN7S1469C23v87Ev
  virtual void  v88(); // _ZN7S1469C23v88Ev
  S1469C2(); // tgen
};
//SIG(-1 S1469C2) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S1469C2 ::~S1469C2(){ note_dtor("S1469C2", this);}
void  S1469C2 ::v82(){vfunc_called(this, "_ZN7S1469C23v82Ev");}
void  S1469C2 ::v83(){vfunc_called(this, "_ZN7S1469C23v83Ev");}
void  S1469C2 ::v84(){vfunc_called(this, "_ZN7S1469C23v84Ev");}
void  S1469C2 ::v85(){vfunc_called(this, "_ZN7S1469C23v85Ev");}
void  S1469C2 ::v86(){vfunc_called(this, "_ZN7S1469C23v86Ev");}
void  S1469C2 ::v87(){vfunc_called(this, "_ZN7S1469C23v87Ev");}
void  S1469C2 ::v88(){vfunc_called(this, "_ZN7S1469C23v88Ev");}
S1469C2 ::S1469C2(){ note_ctor("S1469C2", this);} // tgen

static void Test_S1469C2()
{
  extern Class_Descriptor cd_S1469C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1469C2, buf);
    S1469C2 *dp, &lv = *(dp=new (buf) S1469C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1469C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1469C2)");
    check_base_class_offset(lv, (S1469C4*)(S1469C3*), 0, "S1469C2");
    check_base_class_offset(lv, (S1469C3*), 0, "S1469C2");
    set_bf_and_test(lv, s1469c2f0, ABISELECT(204,148), 0, 1, 1, "S1469C2");
    set_bf_and_test(lv, s1469c2f1, ABISELECT(204,148), 1, 1, 1, "S1469C2");
    set_bf_and_test(lv, s1469c2f2, ABISELECT(204,148), 2, 1, 1, "S1469C2");
    set_bf_and_test(lv, s1469c2f3, ABISELECT(204,148), 3, 1, 1, "S1469C2");
    check_field_offset(lv, s1469c2f4, ABISELECT(208,152), "S1469C2.s1469c2f4");
    check_field_offset(lv, s1469c2f5, ABISELECT(220,164), "S1469C2.s1469c2f5");
    check_field_offset(lv, s1469c2f6, ABISELECT(224,168), "S1469C2.s1469c2f6");
    check_field_offset(lv, s1469c2f7, ABISELECT(232,176), "S1469C2.s1469c2f7");
    check_field_offset(lv, s1469c2f8, ABISELECT(244,188), "S1469C2.s1469c2f8");
    test_class_info(&lv, &cd_S1469C2);
    dp->~S1469C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1469C2(Test_S1469C2, "S1469C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1469C2C1Ev();
extern void _ZN7S1469C2D1Ev();
Name_Map name_map_S1469C2[] = {
  NSPAIR(_ZN7S1469C2C1Ev),
  NSPAIR(_ZN7S1469C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1469C4;
extern VTBL_ENTRY _ZTI7S1469C4[];
extern  VTBL_ENTRY _ZTV7S1469C4[];
extern Class_Descriptor cd_S1469C3;
extern VTBL_ENTRY _ZTI7S1469C3[];
extern  VTBL_ENTRY _ZTV7S1469C3[];
static Base_Class bases_S1469C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1469C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1469C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1469C2[];
extern void _ZN7S1469C2D1Ev();
extern void _ZN7S1469C2D0Ev();
extern void _ZN7S1469C42v5Ev();
extern void _ZN7S1469C42v6Ev();
extern void _ZN7S1469C42v7Ev();
extern void _ZN7S1469C42v8Ev();
extern void _ZN7S1469C42v9Ev();
extern void _ZN7S1469C43v10Ev();
extern void _ZN7S1469C43v11Ev();
extern void _ZN7S1469C43v12Ev();
extern void _ZN7S1469C43v13Ev();
extern void _ZN7S1469C43v14Ev();
extern void _ZN7S1469C43v15Ev();
extern void _ZN7S1469C43v16Ev();
extern void _ZN7S1469C43v17Ev();
extern void _ZN7S1469C43v18Ev();
extern void _ZN7S1469C43v19Ev();
extern void _ZN7S1469C43v20Ev();
extern void _ZN7S1469C43v21Ev();
extern void _ZN7S1469C43v22Ev();
extern void _ZN7S1469C43v23Ev();
extern void _ZN7S1469C43v24Ev();
extern void _ZN7S1469C43v25Ev();
extern void _ZN7S1469C43v26Ev();
extern void _ZN7S1469C43v27Ev();
extern void _ZN7S1469C43v28Ev();
extern void _ZN7S1469C43v29Ev();
extern void _ZN7S1469C43v30Ev();
extern void _ZN7S1469C43v31Ev();
extern void _ZN7S1469C43v32Ev();
extern void _ZN7S1469C43v33Ev();
extern void _ZN7S1469C43v34Ev();
extern void _ZN7S1469C43v35Ev();
extern void _ZN7S1469C43v36Ev();
extern void _ZN7S1469C43v37Ev();
extern void _ZN7S1469C43v38Ev();
extern void _ZN7S1469C43v39Ev();
extern void _ZN7S1469C43v40Ev();
extern void _ZN7S1469C43v41Ev();
extern void _ZN7S1469C43v42Ev();
extern void _ZN7S1469C43v43Ev();
extern void _ZN7S1469C43v44Ev();
extern void _ZN7S1469C43v45Ev();
extern void _ZN7S1469C43v46Ev();
extern void _ZN7S1469C43v47Ev();
extern void _ZN7S1469C43v48Ev();
extern void _ZN7S1469C43v49Ev();
extern void _ZN7S1469C43v50Ev();
extern void _ZN7S1469C43v51Ev();
extern void _ZN7S1469C43v52Ev();
extern void _ZN7S1469C43v53Ev();
extern void _ZN7S1469C43v54Ev();
extern void _ZN7S1469C43v55Ev();
extern void _ZN7S1469C43v56Ev();
extern void _ZN7S1469C43v57Ev();
extern void _ZN7S1469C43v58Ev();
extern void _ZN7S1469C43v59Ev();
extern void _ZN7S1469C43v60Ev();
extern void _ZN7S1469C43v61Ev();
extern void _ZN7S1469C43v62Ev();
extern void _ZN7S1469C43v63Ev();
extern void _ZN7S1469C43v64Ev();
extern void _ZN7S1469C43v65Ev();
extern void _ZN7S1469C43v66Ev();
extern void _ZN7S1469C43v67Ev();
extern void _ZN7S1469C43v68Ev();
extern void _ZN7S1469C33v69Ev();
extern void _ZN7S1469C33v70Ev();
extern void _ZN7S1469C33v71Ev();
extern void _ZN7S1469C33v72Ev();
extern void _ZN7S1469C33v73Ev();
extern void _ZN7S1469C33v74Ev();
extern void _ZN7S1469C33v75Ev();
extern void _ZN7S1469C33v76Ev();
extern void _ZN7S1469C33v77Ev();
extern void _ZN7S1469C33v78Ev();
extern void _ZN7S1469C33v79Ev();
extern void _ZN7S1469C33v80Ev();
extern void _ZN7S1469C33v81Ev();
extern void _ZN7S1469C23v82Ev();
extern void _ZN7S1469C23v83Ev();
extern void _ZN7S1469C23v84Ev();
extern void _ZN7S1469C23v85Ev();
extern void _ZN7S1469C23v86Ev();
extern void _ZN7S1469C23v87Ev();
extern void _ZN7S1469C23v88Ev();
static  VTBL_ENTRY vtc_S1469C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1469C2[0]),
  (VTBL_ENTRY)&_ZN7S1469C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1469C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1469C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1469C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1469C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1469C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1469C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1469C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1469C23v88Ev,
};
extern VTBL_ENTRY _ZTI7S1469C2[];
extern  VTBL_ENTRY _ZTV7S1469C2[];
Class_Descriptor cd_S1469C2 = {  "S1469C2", // class name
  bases_S1469C2, 2,
  &(vtc_S1469C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1469C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1469C2),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1469C1  : S1469C2 {
  int s1469c1f0[5];
  virtual  ~S1469C1(); // _ZN7S1469C1D1Ev
  virtual void  v1(); // _ZN7S1469C12v1Ev
  virtual void  v2(); // _ZN7S1469C12v2Ev
  virtual void  v3(); // _ZN7S1469C12v3Ev
  virtual void  v4(); // _ZN7S1469C12v4Ev
  S1469C1(); // tgen
};
//SIG(1 S1469C1) C1{ BC2{ BC3{ BC4{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v82 v83 v84 v85 v86 v87 v88 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 v4 Fi[5]}


 S1469C1 ::~S1469C1(){ note_dtor("S1469C1", this);}
void  S1469C1 ::v1(){vfunc_called(this, "_ZN7S1469C12v1Ev");}
void  S1469C1 ::v2(){vfunc_called(this, "_ZN7S1469C12v2Ev");}
void  S1469C1 ::v3(){vfunc_called(this, "_ZN7S1469C12v3Ev");}
void  S1469C1 ::v4(){vfunc_called(this, "_ZN7S1469C12v4Ev");}
S1469C1 ::S1469C1(){ note_ctor("S1469C1", this);} // tgen

static void Test_S1469C1()
{
  extern Class_Descriptor cd_S1469C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,55)];
    init_test(&cd_S1469C1, buf);
    S1469C1 *dp, &lv = *(dp=new (buf) S1469C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,216), "sizeof(S1469C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1469C1)");
    check_base_class_offset(lv, (S1469C4*)(S1469C3*)(S1469C2*), 0, "S1469C1");
    check_base_class_offset(lv, (S1469C3*)(S1469C2*), 0, "S1469C1");
    check_base_class_offset(lv, (S1469C2*), 0, "S1469C1");
    check_field_offset(lv, s1469c1f0, ABISELECT(252,196), "S1469C1.s1469c1f0");
    test_class_info(&lv, &cd_S1469C1);
    dp->~S1469C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1469C1(Test_S1469C1, "S1469C1", ABISELECT(272,216));

#else // __cplusplus

extern void _ZN7S1469C1C1Ev();
extern void _ZN7S1469C1D1Ev();
Name_Map name_map_S1469C1[] = {
  NSPAIR(_ZN7S1469C1C1Ev),
  NSPAIR(_ZN7S1469C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1469C4;
extern VTBL_ENTRY _ZTI7S1469C4[];
extern  VTBL_ENTRY _ZTV7S1469C4[];
extern Class_Descriptor cd_S1469C3;
extern VTBL_ENTRY _ZTI7S1469C3[];
extern  VTBL_ENTRY _ZTV7S1469C3[];
extern Class_Descriptor cd_S1469C2;
extern VTBL_ENTRY _ZTI7S1469C2[];
extern  VTBL_ENTRY _ZTV7S1469C2[];
static Base_Class bases_S1469C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1469C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1469C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1469C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1469C1[];
extern void _ZN7S1469C1D1Ev();
extern void _ZN7S1469C1D0Ev();
extern void _ZN7S1469C42v5Ev();
extern void _ZN7S1469C42v6Ev();
extern void _ZN7S1469C42v7Ev();
extern void _ZN7S1469C42v8Ev();
extern void _ZN7S1469C42v9Ev();
extern void _ZN7S1469C43v10Ev();
extern void _ZN7S1469C43v11Ev();
extern void _ZN7S1469C43v12Ev();
extern void _ZN7S1469C43v13Ev();
extern void _ZN7S1469C43v14Ev();
extern void _ZN7S1469C43v15Ev();
extern void _ZN7S1469C43v16Ev();
extern void _ZN7S1469C43v17Ev();
extern void _ZN7S1469C43v18Ev();
extern void _ZN7S1469C43v19Ev();
extern void _ZN7S1469C43v20Ev();
extern void _ZN7S1469C43v21Ev();
extern void _ZN7S1469C43v22Ev();
extern void _ZN7S1469C43v23Ev();
extern void _ZN7S1469C43v24Ev();
extern void _ZN7S1469C43v25Ev();
extern void _ZN7S1469C43v26Ev();
extern void _ZN7S1469C43v27Ev();
extern void _ZN7S1469C43v28Ev();
extern void _ZN7S1469C43v29Ev();
extern void _ZN7S1469C43v30Ev();
extern void _ZN7S1469C43v31Ev();
extern void _ZN7S1469C43v32Ev();
extern void _ZN7S1469C43v33Ev();
extern void _ZN7S1469C43v34Ev();
extern void _ZN7S1469C43v35Ev();
extern void _ZN7S1469C43v36Ev();
extern void _ZN7S1469C43v37Ev();
extern void _ZN7S1469C43v38Ev();
extern void _ZN7S1469C43v39Ev();
extern void _ZN7S1469C43v40Ev();
extern void _ZN7S1469C43v41Ev();
extern void _ZN7S1469C43v42Ev();
extern void _ZN7S1469C43v43Ev();
extern void _ZN7S1469C43v44Ev();
extern void _ZN7S1469C43v45Ev();
extern void _ZN7S1469C43v46Ev();
extern void _ZN7S1469C43v47Ev();
extern void _ZN7S1469C43v48Ev();
extern void _ZN7S1469C43v49Ev();
extern void _ZN7S1469C43v50Ev();
extern void _ZN7S1469C43v51Ev();
extern void _ZN7S1469C43v52Ev();
extern void _ZN7S1469C43v53Ev();
extern void _ZN7S1469C43v54Ev();
extern void _ZN7S1469C43v55Ev();
extern void _ZN7S1469C43v56Ev();
extern void _ZN7S1469C43v57Ev();
extern void _ZN7S1469C43v58Ev();
extern void _ZN7S1469C43v59Ev();
extern void _ZN7S1469C43v60Ev();
extern void _ZN7S1469C43v61Ev();
extern void _ZN7S1469C43v62Ev();
extern void _ZN7S1469C43v63Ev();
extern void _ZN7S1469C43v64Ev();
extern void _ZN7S1469C43v65Ev();
extern void _ZN7S1469C43v66Ev();
extern void _ZN7S1469C43v67Ev();
extern void _ZN7S1469C43v68Ev();
extern void _ZN7S1469C33v69Ev();
extern void _ZN7S1469C33v70Ev();
extern void _ZN7S1469C33v71Ev();
extern void _ZN7S1469C33v72Ev();
extern void _ZN7S1469C33v73Ev();
extern void _ZN7S1469C33v74Ev();
extern void _ZN7S1469C33v75Ev();
extern void _ZN7S1469C33v76Ev();
extern void _ZN7S1469C33v77Ev();
extern void _ZN7S1469C33v78Ev();
extern void _ZN7S1469C33v79Ev();
extern void _ZN7S1469C33v80Ev();
extern void _ZN7S1469C33v81Ev();
extern void _ZN7S1469C23v82Ev();
extern void _ZN7S1469C23v83Ev();
extern void _ZN7S1469C23v84Ev();
extern void _ZN7S1469C23v85Ev();
extern void _ZN7S1469C23v86Ev();
extern void _ZN7S1469C23v87Ev();
extern void _ZN7S1469C23v88Ev();
extern void _ZN7S1469C12v1Ev();
extern void _ZN7S1469C12v2Ev();
extern void _ZN7S1469C12v3Ev();
extern void _ZN7S1469C12v4Ev();
static  VTBL_ENTRY vtc_S1469C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1469C1[0]),
  (VTBL_ENTRY)&_ZN7S1469C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1469C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1469C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1469C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1469C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1469C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1469C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1469C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1469C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1469C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1469C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1469C23v88Ev,
  (VTBL_ENTRY)&_ZN7S1469C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1469C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1469C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1469C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S1469C1[];
extern  VTBL_ENTRY _ZTV7S1469C1[];
Class_Descriptor cd_S1469C1 = {  "S1469C1", // class name
  bases_S1469C1, 3,
  &(vtc_S1469C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,216), // object size
  NSPAIRA(_ZTI7S1469C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1469C1),92, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1424C4  {
  int s1424c4f0;
  __tsi64 s1424c4f1;
  void *s1424c4f2[4];
  int s1424c4f3[2];
  void *s1424c4f4;
  ::S3432C14_nt s1424c4f5;
  void *s1424c4f6[2];
  virtual  ~S1424C4(); // _ZN7S1424C4D1Ev
  virtual void  v4(); // _ZN7S1424C42v4Ev
  virtual void  v5(); // _ZN7S1424C42v5Ev
  virtual void  v6(); // _ZN7S1424C42v6Ev
  virtual void  v7(); // _ZN7S1424C42v7Ev
  virtual void  v8(); // _ZN7S1424C42v8Ev
  virtual void  v9(); // _ZN7S1424C42v9Ev
  virtual void  v10(); // _ZN7S1424C43v10Ev
  virtual void  v11(); // _ZN7S1424C43v11Ev
  virtual void  v12(); // _ZN7S1424C43v12Ev
  virtual void  v13(); // _ZN7S1424C43v13Ev
  virtual void  v14(); // _ZN7S1424C43v14Ev
  virtual void  v15(); // _ZN7S1424C43v15Ev
  virtual void  v16(); // _ZN7S1424C43v16Ev
  virtual void  v17(); // _ZN7S1424C43v17Ev
  virtual void  v18(); // _ZN7S1424C43v18Ev
  virtual void  v19(); // _ZN7S1424C43v19Ev
  virtual void  v20(); // _ZN7S1424C43v20Ev
  virtual void  v21(); // _ZN7S1424C43v21Ev
  virtual void  v22(); // _ZN7S1424C43v22Ev
  virtual void  v23(); // _ZN7S1424C43v23Ev
  virtual void  v24(); // _ZN7S1424C43v24Ev
  virtual void  v25(); // _ZN7S1424C43v25Ev
  virtual void  v26(); // _ZN7S1424C43v26Ev
  virtual void  v27(); // _ZN7S1424C43v27Ev
  virtual void  v28(); // _ZN7S1424C43v28Ev
  virtual void  v29(); // _ZN7S1424C43v29Ev
  virtual void  v30(); // _ZN7S1424C43v30Ev
  virtual void  v31(); // _ZN7S1424C43v31Ev
  virtual void  v32(); // _ZN7S1424C43v32Ev
  virtual void  v33(); // _ZN7S1424C43v33Ev
  virtual void  v34(); // _ZN7S1424C43v34Ev
  virtual void  v35(); // _ZN7S1424C43v35Ev
  virtual void  v36(); // _ZN7S1424C43v36Ev
  virtual void  v37(); // _ZN7S1424C43v37Ev
  virtual void  v38(); // _ZN7S1424C43v38Ev
  virtual void  v39(); // _ZN7S1424C43v39Ev
  virtual void  v40(); // _ZN7S1424C43v40Ev
  virtual void  v41(); // _ZN7S1424C43v41Ev
  virtual void  v42(); // _ZN7S1424C43v42Ev
  virtual void  v43(); // _ZN7S1424C43v43Ev
  virtual void  v44(); // _ZN7S1424C43v44Ev
  virtual void  v45(); // _ZN7S1424C43v45Ev
  virtual void  v46(); // _ZN7S1424C43v46Ev
  virtual void  v47(); // _ZN7S1424C43v47Ev
  virtual void  v48(); // _ZN7S1424C43v48Ev
  virtual void  v49(); // _ZN7S1424C43v49Ev
  virtual void  v50(); // _ZN7S1424C43v50Ev
  virtual void  v51(); // _ZN7S1424C43v51Ev
  virtual void  v52(); // _ZN7S1424C43v52Ev
  virtual void  v53(); // _ZN7S1424C43v53Ev
  virtual void  v54(); // _ZN7S1424C43v54Ev
  virtual void  v55(); // _ZN7S1424C43v55Ev
  virtual void  v56(); // _ZN7S1424C43v56Ev
  virtual void  v57(); // _ZN7S1424C43v57Ev
  virtual void  v58(); // _ZN7S1424C43v58Ev
  virtual void  v59(); // _ZN7S1424C43v59Ev
  virtual void  v60(); // _ZN7S1424C43v60Ev
  virtual void  v61(); // _ZN7S1424C43v61Ev
  virtual void  v62(); // _ZN7S1424C43v62Ev
  virtual void  v63(); // _ZN7S1424C43v63Ev
  virtual void  v64(); // _ZN7S1424C43v64Ev
  virtual void  v65(); // _ZN7S1424C43v65Ev
  virtual void  v66(); // _ZN7S1424C43v66Ev
  virtual void  v67(); // _ZN7S1424C43v67Ev
  S1424C4(); // tgen
};
//SIG(-1 S1424C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1424C4 ::~S1424C4(){ note_dtor("S1424C4", this);}
void  S1424C4 ::v4(){vfunc_called(this, "_ZN7S1424C42v4Ev");}
void  S1424C4 ::v5(){vfunc_called(this, "_ZN7S1424C42v5Ev");}
void  S1424C4 ::v6(){vfunc_called(this, "_ZN7S1424C42v6Ev");}
void  S1424C4 ::v7(){vfunc_called(this, "_ZN7S1424C42v7Ev");}
void  S1424C4 ::v8(){vfunc_called(this, "_ZN7S1424C42v8Ev");}
void  S1424C4 ::v9(){vfunc_called(this, "_ZN7S1424C42v9Ev");}
void  S1424C4 ::v10(){vfunc_called(this, "_ZN7S1424C43v10Ev");}
void  S1424C4 ::v11(){vfunc_called(this, "_ZN7S1424C43v11Ev");}
void  S1424C4 ::v12(){vfunc_called(this, "_ZN7S1424C43v12Ev");}
void  S1424C4 ::v13(){vfunc_called(this, "_ZN7S1424C43v13Ev");}
void  S1424C4 ::v14(){vfunc_called(this, "_ZN7S1424C43v14Ev");}
void  S1424C4 ::v15(){vfunc_called(this, "_ZN7S1424C43v15Ev");}
void  S1424C4 ::v16(){vfunc_called(this, "_ZN7S1424C43v16Ev");}
void  S1424C4 ::v17(){vfunc_called(this, "_ZN7S1424C43v17Ev");}
void  S1424C4 ::v18(){vfunc_called(this, "_ZN7S1424C43v18Ev");}
void  S1424C4 ::v19(){vfunc_called(this, "_ZN7S1424C43v19Ev");}
void  S1424C4 ::v20(){vfunc_called(this, "_ZN7S1424C43v20Ev");}
void  S1424C4 ::v21(){vfunc_called(this, "_ZN7S1424C43v21Ev");}
void  S1424C4 ::v22(){vfunc_called(this, "_ZN7S1424C43v22Ev");}
void  S1424C4 ::v23(){vfunc_called(this, "_ZN7S1424C43v23Ev");}
void  S1424C4 ::v24(){vfunc_called(this, "_ZN7S1424C43v24Ev");}
void  S1424C4 ::v25(){vfunc_called(this, "_ZN7S1424C43v25Ev");}
void  S1424C4 ::v26(){vfunc_called(this, "_ZN7S1424C43v26Ev");}
void  S1424C4 ::v27(){vfunc_called(this, "_ZN7S1424C43v27Ev");}
void  S1424C4 ::v28(){vfunc_called(this, "_ZN7S1424C43v28Ev");}
void  S1424C4 ::v29(){vfunc_called(this, "_ZN7S1424C43v29Ev");}
void  S1424C4 ::v30(){vfunc_called(this, "_ZN7S1424C43v30Ev");}
void  S1424C4 ::v31(){vfunc_called(this, "_ZN7S1424C43v31Ev");}
void  S1424C4 ::v32(){vfunc_called(this, "_ZN7S1424C43v32Ev");}
void  S1424C4 ::v33(){vfunc_called(this, "_ZN7S1424C43v33Ev");}
void  S1424C4 ::v34(){vfunc_called(this, "_ZN7S1424C43v34Ev");}
void  S1424C4 ::v35(){vfunc_called(this, "_ZN7S1424C43v35Ev");}
void  S1424C4 ::v36(){vfunc_called(this, "_ZN7S1424C43v36Ev");}
void  S1424C4 ::v37(){vfunc_called(this, "_ZN7S1424C43v37Ev");}
void  S1424C4 ::v38(){vfunc_called(this, "_ZN7S1424C43v38Ev");}
void  S1424C4 ::v39(){vfunc_called(this, "_ZN7S1424C43v39Ev");}
void  S1424C4 ::v40(){vfunc_called(this, "_ZN7S1424C43v40Ev");}
void  S1424C4 ::v41(){vfunc_called(this, "_ZN7S1424C43v41Ev");}
void  S1424C4 ::v42(){vfunc_called(this, "_ZN7S1424C43v42Ev");}
void  S1424C4 ::v43(){vfunc_called(this, "_ZN7S1424C43v43Ev");}
void  S1424C4 ::v44(){vfunc_called(this, "_ZN7S1424C43v44Ev");}
void  S1424C4 ::v45(){vfunc_called(this, "_ZN7S1424C43v45Ev");}
void  S1424C4 ::v46(){vfunc_called(this, "_ZN7S1424C43v46Ev");}
void  S1424C4 ::v47(){vfunc_called(this, "_ZN7S1424C43v47Ev");}
void  S1424C4 ::v48(){vfunc_called(this, "_ZN7S1424C43v48Ev");}
void  S1424C4 ::v49(){vfunc_called(this, "_ZN7S1424C43v49Ev");}
void  S1424C4 ::v50(){vfunc_called(this, "_ZN7S1424C43v50Ev");}
void  S1424C4 ::v51(){vfunc_called(this, "_ZN7S1424C43v51Ev");}
void  S1424C4 ::v52(){vfunc_called(this, "_ZN7S1424C43v52Ev");}
void  S1424C4 ::v53(){vfunc_called(this, "_ZN7S1424C43v53Ev");}
void  S1424C4 ::v54(){vfunc_called(this, "_ZN7S1424C43v54Ev");}
void  S1424C4 ::v55(){vfunc_called(this, "_ZN7S1424C43v55Ev");}
void  S1424C4 ::v56(){vfunc_called(this, "_ZN7S1424C43v56Ev");}
void  S1424C4 ::v57(){vfunc_called(this, "_ZN7S1424C43v57Ev");}
void  S1424C4 ::v58(){vfunc_called(this, "_ZN7S1424C43v58Ev");}
void  S1424C4 ::v59(){vfunc_called(this, "_ZN7S1424C43v59Ev");}
void  S1424C4 ::v60(){vfunc_called(this, "_ZN7S1424C43v60Ev");}
void  S1424C4 ::v61(){vfunc_called(this, "_ZN7S1424C43v61Ev");}
void  S1424C4 ::v62(){vfunc_called(this, "_ZN7S1424C43v62Ev");}
void  S1424C4 ::v63(){vfunc_called(this, "_ZN7S1424C43v63Ev");}
void  S1424C4 ::v64(){vfunc_called(this, "_ZN7S1424C43v64Ev");}
void  S1424C4 ::v65(){vfunc_called(this, "_ZN7S1424C43v65Ev");}
void  S1424C4 ::v66(){vfunc_called(this, "_ZN7S1424C43v66Ev");}
void  S1424C4 ::v67(){vfunc_called(this, "_ZN7S1424C43v67Ev");}
S1424C4 ::S1424C4(){ note_ctor("S1424C4", this);} // tgen

static void Test_S1424C4()
{
  extern Class_Descriptor cd_S1424C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1424C4, buf);
    S1424C4 *dp, &lv = *(dp=new (buf) S1424C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1424C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1424C4)");
    check_field_offset(lv, s1424c4f0, ABISELECT(8,4), "S1424C4.s1424c4f0");
    check_field_offset(lv, s1424c4f1, ABISELECT(16,8), "S1424C4.s1424c4f1");
    check_field_offset(lv, s1424c4f2, ABISELECT(24,16), "S1424C4.s1424c4f2");
    check_field_offset(lv, s1424c4f3, ABISELECT(56,32), "S1424C4.s1424c4f3");
    check_field_offset(lv, s1424c4f4, ABISELECT(64,40), "S1424C4.s1424c4f4");
    check_field_offset(lv, s1424c4f5, ABISELECT(72,44), "S1424C4.s1424c4f5");
    check_field_offset(lv, s1424c4f6, ABISELECT(80,52), "S1424C4.s1424c4f6");
    test_class_info(&lv, &cd_S1424C4);
    dp->~S1424C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1424C4(Test_S1424C4, "S1424C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1424C4C1Ev();
extern void _ZN7S1424C4D1Ev();
Name_Map name_map_S1424C4[] = {
  NSPAIR(_ZN7S1424C4C1Ev),
  NSPAIR(_ZN7S1424C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1424C4[];
extern void _ZN7S1424C4D1Ev();
extern void _ZN7S1424C4D0Ev();
extern void _ZN7S1424C42v4Ev();
extern void _ZN7S1424C42v5Ev();
extern void _ZN7S1424C42v6Ev();
extern void _ZN7S1424C42v7Ev();
extern void _ZN7S1424C42v8Ev();
extern void _ZN7S1424C42v9Ev();
extern void _ZN7S1424C43v10Ev();
extern void _ZN7S1424C43v11Ev();
extern void _ZN7S1424C43v12Ev();
extern void _ZN7S1424C43v13Ev();
extern void _ZN7S1424C43v14Ev();
extern void _ZN7S1424C43v15Ev();
extern void _ZN7S1424C43v16Ev();
extern void _ZN7S1424C43v17Ev();
extern void _ZN7S1424C43v18Ev();
extern void _ZN7S1424C43v19Ev();
extern void _ZN7S1424C43v20Ev();
extern void _ZN7S1424C43v21Ev();
extern void _ZN7S1424C43v22Ev();
extern void _ZN7S1424C43v23Ev();
extern void _ZN7S1424C43v24Ev();
extern void _ZN7S1424C43v25Ev();
extern void _ZN7S1424C43v26Ev();
extern void _ZN7S1424C43v27Ev();
extern void _ZN7S1424C43v28Ev();
extern void _ZN7S1424C43v29Ev();
extern void _ZN7S1424C43v30Ev();
extern void _ZN7S1424C43v31Ev();
extern void _ZN7S1424C43v32Ev();
extern void _ZN7S1424C43v33Ev();
extern void _ZN7S1424C43v34Ev();
extern void _ZN7S1424C43v35Ev();
extern void _ZN7S1424C43v36Ev();
extern void _ZN7S1424C43v37Ev();
extern void _ZN7S1424C43v38Ev();
extern void _ZN7S1424C43v39Ev();
extern void _ZN7S1424C43v40Ev();
extern void _ZN7S1424C43v41Ev();
extern void _ZN7S1424C43v42Ev();
extern void _ZN7S1424C43v43Ev();
extern void _ZN7S1424C43v44Ev();
extern void _ZN7S1424C43v45Ev();
extern void _ZN7S1424C43v46Ev();
extern void _ZN7S1424C43v47Ev();
extern void _ZN7S1424C43v48Ev();
extern void _ZN7S1424C43v49Ev();
extern void _ZN7S1424C43v50Ev();
extern void _ZN7S1424C43v51Ev();
extern void _ZN7S1424C43v52Ev();
extern void _ZN7S1424C43v53Ev();
extern void _ZN7S1424C43v54Ev();
extern void _ZN7S1424C43v55Ev();
extern void _ZN7S1424C43v56Ev();
extern void _ZN7S1424C43v57Ev();
extern void _ZN7S1424C43v58Ev();
extern void _ZN7S1424C43v59Ev();
extern void _ZN7S1424C43v60Ev();
extern void _ZN7S1424C43v61Ev();
extern void _ZN7S1424C43v62Ev();
extern void _ZN7S1424C43v63Ev();
extern void _ZN7S1424C43v64Ev();
extern void _ZN7S1424C43v65Ev();
extern void _ZN7S1424C43v66Ev();
extern void _ZN7S1424C43v67Ev();
static  VTBL_ENTRY vtc_S1424C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1424C4[0]),
  (VTBL_ENTRY)&_ZN7S1424C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1424C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v67Ev,
};
extern VTBL_ENTRY _ZTI7S1424C4[];
extern  VTBL_ENTRY _ZTV7S1424C4[];
Class_Descriptor cd_S1424C4 = {  "S1424C4", // class name
  0,0,//no base classes
  &(vtc_S1424C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1424C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1424C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1424C3  : S1424C4 {
  void *s1424c3f0;
  ::S3432C14_nt s1424c3f1;
  int s1424c3f2[5];
  unsigned int s1424c3f3:1;
  unsigned int s1424c3f4:1;
  unsigned int s1424c3f5:1;
  unsigned int s1424c3f6:1;
  unsigned int s1424c3f7:1;
  ::S273C21 s1424c3f8;
  ::S273C17 s1424c3f9;
  unsigned int s1424c3f10:1;
  int s1424c3f11[2];
  void *s1424c3f12;
  int s1424c3f13[3];
  virtual  ~S1424C3(); // _ZN7S1424C3D1Ev
  virtual void  v68(); // _ZN7S1424C33v68Ev
  virtual void  v69(); // _ZN7S1424C33v69Ev
  virtual void  v70(); // _ZN7S1424C33v70Ev
  virtual void  v71(); // _ZN7S1424C33v71Ev
  virtual void  v72(); // _ZN7S1424C33v72Ev
  virtual void  v73(); // _ZN7S1424C33v73Ev
  virtual void  v74(); // _ZN7S1424C33v74Ev
  virtual void  v75(); // _ZN7S1424C33v75Ev
  virtual void  v76(); // _ZN7S1424C33v76Ev
  virtual void  v77(); // _ZN7S1424C33v77Ev
  virtual void  v78(); // _ZN7S1424C33v78Ev
  virtual void  v79(); // _ZN7S1424C33v79Ev
  virtual void  v80(); // _ZN7S1424C33v80Ev
  S1424C3(); // tgen
};
//SIG(-1 S1424C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1424C3 ::~S1424C3(){ note_dtor("S1424C3", this);}
void  S1424C3 ::v68(){vfunc_called(this, "_ZN7S1424C33v68Ev");}
void  S1424C3 ::v69(){vfunc_called(this, "_ZN7S1424C33v69Ev");}
void  S1424C3 ::v70(){vfunc_called(this, "_ZN7S1424C33v70Ev");}
void  S1424C3 ::v71(){vfunc_called(this, "_ZN7S1424C33v71Ev");}
void  S1424C3 ::v72(){vfunc_called(this, "_ZN7S1424C33v72Ev");}
void  S1424C3 ::v73(){vfunc_called(this, "_ZN7S1424C33v73Ev");}
void  S1424C3 ::v74(){vfunc_called(this, "_ZN7S1424C33v74Ev");}
void  S1424C3 ::v75(){vfunc_called(this, "_ZN7S1424C33v75Ev");}
void  S1424C3 ::v76(){vfunc_called(this, "_ZN7S1424C33v76Ev");}
void  S1424C3 ::v77(){vfunc_called(this, "_ZN7S1424C33v77Ev");}
void  S1424C3 ::v78(){vfunc_called(this, "_ZN7S1424C33v78Ev");}
void  S1424C3 ::v79(){vfunc_called(this, "_ZN7S1424C33v79Ev");}
void  S1424C3 ::v80(){vfunc_called(this, "_ZN7S1424C33v80Ev");}
S1424C3 ::S1424C3(){ note_ctor("S1424C3", this);} // tgen

static void Test_S1424C3()
{
  extern Class_Descriptor cd_S1424C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1424C3, buf);
    S1424C3 *dp, &lv = *(dp=new (buf) S1424C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1424C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1424C3)");
    check_base_class_offset(lv, (S1424C4*), 0, "S1424C3");
    check_field_offset(lv, s1424c3f0, ABISELECT(96,60), "S1424C3.s1424c3f0");
    check_field_offset(lv, s1424c3f1, ABISELECT(104,64), "S1424C3.s1424c3f1");
    check_field_offset(lv, s1424c3f2, ABISELECT(112,72), "S1424C3.s1424c3f2");
    set_bf_and_test(lv, s1424c3f3, ABISELECT(132,92), 0, 1, 1, "S1424C3");
    set_bf_and_test(lv, s1424c3f4, ABISELECT(132,92), 1, 1, 1, "S1424C3");
    set_bf_and_test(lv, s1424c3f5, ABISELECT(132,92), 2, 1, 1, "S1424C3");
    set_bf_and_test(lv, s1424c3f6, ABISELECT(132,92), 3, 1, 1, "S1424C3");
    set_bf_and_test(lv, s1424c3f7, ABISELECT(132,92), 4, 1, 1, "S1424C3");
    check_field_offset(lv, s1424c3f8, ABISELECT(136,96), "S1424C3.s1424c3f8");
    check_field_offset(lv, s1424c3f9, ABISELECT(152,108), "S1424C3.s1424c3f9");
    set_bf_and_test(lv, s1424c3f10, ABISELECT(168,120), 0, 1, 1, "S1424C3");
    check_field_offset(lv, s1424c3f11, ABISELECT(172,124), "S1424C3.s1424c3f11");
    check_field_offset(lv, s1424c3f12, ABISELECT(184,132), "S1424C3.s1424c3f12");
    check_field_offset(lv, s1424c3f13, ABISELECT(192,136), "S1424C3.s1424c3f13");
    test_class_info(&lv, &cd_S1424C3);
    dp->~S1424C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1424C3(Test_S1424C3, "S1424C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1424C3C1Ev();
extern void _ZN7S1424C3D1Ev();
Name_Map name_map_S1424C3[] = {
  NSPAIR(_ZN7S1424C3C1Ev),
  NSPAIR(_ZN7S1424C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1424C4;
extern VTBL_ENTRY _ZTI7S1424C4[];
extern  VTBL_ENTRY _ZTV7S1424C4[];
static Base_Class bases_S1424C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1424C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1424C3[];
extern void _ZN7S1424C3D1Ev();
extern void _ZN7S1424C3D0Ev();
extern void _ZN7S1424C42v4Ev();
extern void _ZN7S1424C42v5Ev();
extern void _ZN7S1424C42v6Ev();
extern void _ZN7S1424C42v7Ev();
extern void _ZN7S1424C42v8Ev();
extern void _ZN7S1424C42v9Ev();
extern void _ZN7S1424C43v10Ev();
extern void _ZN7S1424C43v11Ev();
extern void _ZN7S1424C43v12Ev();
extern void _ZN7S1424C43v13Ev();
extern void _ZN7S1424C43v14Ev();
extern void _ZN7S1424C43v15Ev();
extern void _ZN7S1424C43v16Ev();
extern void _ZN7S1424C43v17Ev();
extern void _ZN7S1424C43v18Ev();
extern void _ZN7S1424C43v19Ev();
extern void _ZN7S1424C43v20Ev();
extern void _ZN7S1424C43v21Ev();
extern void _ZN7S1424C43v22Ev();
extern void _ZN7S1424C43v23Ev();
extern void _ZN7S1424C43v24Ev();
extern void _ZN7S1424C43v25Ev();
extern void _ZN7S1424C43v26Ev();
extern void _ZN7S1424C43v27Ev();
extern void _ZN7S1424C43v28Ev();
extern void _ZN7S1424C43v29Ev();
extern void _ZN7S1424C43v30Ev();
extern void _ZN7S1424C43v31Ev();
extern void _ZN7S1424C43v32Ev();
extern void _ZN7S1424C43v33Ev();
extern void _ZN7S1424C43v34Ev();
extern void _ZN7S1424C43v35Ev();
extern void _ZN7S1424C43v36Ev();
extern void _ZN7S1424C43v37Ev();
extern void _ZN7S1424C43v38Ev();
extern void _ZN7S1424C43v39Ev();
extern void _ZN7S1424C43v40Ev();
extern void _ZN7S1424C43v41Ev();
extern void _ZN7S1424C43v42Ev();
extern void _ZN7S1424C43v43Ev();
extern void _ZN7S1424C43v44Ev();
extern void _ZN7S1424C43v45Ev();
extern void _ZN7S1424C43v46Ev();
extern void _ZN7S1424C43v47Ev();
extern void _ZN7S1424C43v48Ev();
extern void _ZN7S1424C43v49Ev();
extern void _ZN7S1424C43v50Ev();
extern void _ZN7S1424C43v51Ev();
extern void _ZN7S1424C43v52Ev();
extern void _ZN7S1424C43v53Ev();
extern void _ZN7S1424C43v54Ev();
extern void _ZN7S1424C43v55Ev();
extern void _ZN7S1424C43v56Ev();
extern void _ZN7S1424C43v57Ev();
extern void _ZN7S1424C43v58Ev();
extern void _ZN7S1424C43v59Ev();
extern void _ZN7S1424C43v60Ev();
extern void _ZN7S1424C43v61Ev();
extern void _ZN7S1424C43v62Ev();
extern void _ZN7S1424C43v63Ev();
extern void _ZN7S1424C43v64Ev();
extern void _ZN7S1424C43v65Ev();
extern void _ZN7S1424C43v66Ev();
extern void _ZN7S1424C43v67Ev();
extern void _ZN7S1424C33v68Ev();
extern void _ZN7S1424C33v69Ev();
extern void _ZN7S1424C33v70Ev();
extern void _ZN7S1424C33v71Ev();
extern void _ZN7S1424C33v72Ev();
extern void _ZN7S1424C33v73Ev();
extern void _ZN7S1424C33v74Ev();
extern void _ZN7S1424C33v75Ev();
extern void _ZN7S1424C33v76Ev();
extern void _ZN7S1424C33v77Ev();
extern void _ZN7S1424C33v78Ev();
extern void _ZN7S1424C33v79Ev();
extern void _ZN7S1424C33v80Ev();
static  VTBL_ENTRY vtc_S1424C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1424C3[0]),
  (VTBL_ENTRY)&_ZN7S1424C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1424C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S1424C3[];
extern  VTBL_ENTRY _ZTV7S1424C3[];
Class_Descriptor cd_S1424C3 = {  "S1424C3", // class name
  bases_S1424C3, 1,
  &(vtc_S1424C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1424C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1424C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1424C2  : S1424C3 {
  unsigned int s1424c2f0:1;
  unsigned int s1424c2f1:1;
  unsigned int s1424c2f2:1;
  unsigned int s1424c2f3:1;
  ::S664C12_nt s1424c2f4;
  char s1424c2f5[2];
  ::S3432C14_nt s1424c2f6;
  ::S632C13 s1424c2f7;
  ::S3432C14_nt s1424c2f8;
  virtual  ~S1424C2(); // _ZN7S1424C2D1Ev
  virtual void  v81(); // _ZN7S1424C23v81Ev
  virtual void  v82(); // _ZN7S1424C23v82Ev
  virtual void  v83(); // _ZN7S1424C23v83Ev
  virtual void  v84(); // _ZN7S1424C23v84Ev
  virtual void  v85(); // _ZN7S1424C23v85Ev
  virtual void  v86(); // _ZN7S1424C23v86Ev
  virtual void  v87(); // _ZN7S1424C23v87Ev
  S1424C2(); // tgen
};
//SIG(-1 S1424C2) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S1424C2 ::~S1424C2(){ note_dtor("S1424C2", this);}
void  S1424C2 ::v81(){vfunc_called(this, "_ZN7S1424C23v81Ev");}
void  S1424C2 ::v82(){vfunc_called(this, "_ZN7S1424C23v82Ev");}
void  S1424C2 ::v83(){vfunc_called(this, "_ZN7S1424C23v83Ev");}
void  S1424C2 ::v84(){vfunc_called(this, "_ZN7S1424C23v84Ev");}
void  S1424C2 ::v85(){vfunc_called(this, "_ZN7S1424C23v85Ev");}
void  S1424C2 ::v86(){vfunc_called(this, "_ZN7S1424C23v86Ev");}
void  S1424C2 ::v87(){vfunc_called(this, "_ZN7S1424C23v87Ev");}
S1424C2 ::S1424C2(){ note_ctor("S1424C2", this);} // tgen

static void Test_S1424C2()
{
  extern Class_Descriptor cd_S1424C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1424C2, buf);
    S1424C2 *dp, &lv = *(dp=new (buf) S1424C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1424C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1424C2)");
    check_base_class_offset(lv, (S1424C4*)(S1424C3*), 0, "S1424C2");
    check_base_class_offset(lv, (S1424C3*), 0, "S1424C2");
    set_bf_and_test(lv, s1424c2f0, ABISELECT(204,148), 0, 1, 1, "S1424C2");
    set_bf_and_test(lv, s1424c2f1, ABISELECT(204,148), 1, 1, 1, "S1424C2");
    set_bf_and_test(lv, s1424c2f2, ABISELECT(204,148), 2, 1, 1, "S1424C2");
    set_bf_and_test(lv, s1424c2f3, ABISELECT(204,148), 3, 1, 1, "S1424C2");
    check_field_offset(lv, s1424c2f4, ABISELECT(208,152), "S1424C2.s1424c2f4");
    check_field_offset(lv, s1424c2f5, ABISELECT(220,164), "S1424C2.s1424c2f5");
    check_field_offset(lv, s1424c2f6, ABISELECT(224,168), "S1424C2.s1424c2f6");
    check_field_offset(lv, s1424c2f7, ABISELECT(232,176), "S1424C2.s1424c2f7");
    check_field_offset(lv, s1424c2f8, ABISELECT(244,188), "S1424C2.s1424c2f8");
    test_class_info(&lv, &cd_S1424C2);
    dp->~S1424C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1424C2(Test_S1424C2, "S1424C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1424C2C1Ev();
extern void _ZN7S1424C2D1Ev();
Name_Map name_map_S1424C2[] = {
  NSPAIR(_ZN7S1424C2C1Ev),
  NSPAIR(_ZN7S1424C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1424C4;
extern VTBL_ENTRY _ZTI7S1424C4[];
extern  VTBL_ENTRY _ZTV7S1424C4[];
extern Class_Descriptor cd_S1424C3;
extern VTBL_ENTRY _ZTI7S1424C3[];
extern  VTBL_ENTRY _ZTV7S1424C3[];
static Base_Class bases_S1424C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1424C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1424C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1424C2[];
extern void _ZN7S1424C2D1Ev();
extern void _ZN7S1424C2D0Ev();
extern void _ZN7S1424C42v4Ev();
extern void _ZN7S1424C42v5Ev();
extern void _ZN7S1424C42v6Ev();
extern void _ZN7S1424C42v7Ev();
extern void _ZN7S1424C42v8Ev();
extern void _ZN7S1424C42v9Ev();
extern void _ZN7S1424C43v10Ev();
extern void _ZN7S1424C43v11Ev();
extern void _ZN7S1424C43v12Ev();
extern void _ZN7S1424C43v13Ev();
extern void _ZN7S1424C43v14Ev();
extern void _ZN7S1424C43v15Ev();
extern void _ZN7S1424C43v16Ev();
extern void _ZN7S1424C43v17Ev();
extern void _ZN7S1424C43v18Ev();
extern void _ZN7S1424C43v19Ev();
extern void _ZN7S1424C43v20Ev();
extern void _ZN7S1424C43v21Ev();
extern void _ZN7S1424C43v22Ev();
extern void _ZN7S1424C43v23Ev();
extern void _ZN7S1424C43v24Ev();
extern void _ZN7S1424C43v25Ev();
extern void _ZN7S1424C43v26Ev();
extern void _ZN7S1424C43v27Ev();
extern void _ZN7S1424C43v28Ev();
extern void _ZN7S1424C43v29Ev();
extern void _ZN7S1424C43v30Ev();
extern void _ZN7S1424C43v31Ev();
extern void _ZN7S1424C43v32Ev();
extern void _ZN7S1424C43v33Ev();
extern void _ZN7S1424C43v34Ev();
extern void _ZN7S1424C43v35Ev();
extern void _ZN7S1424C43v36Ev();
extern void _ZN7S1424C43v37Ev();
extern void _ZN7S1424C43v38Ev();
extern void _ZN7S1424C43v39Ev();
extern void _ZN7S1424C43v40Ev();
extern void _ZN7S1424C43v41Ev();
extern void _ZN7S1424C43v42Ev();
extern void _ZN7S1424C43v43Ev();
extern void _ZN7S1424C43v44Ev();
extern void _ZN7S1424C43v45Ev();
extern void _ZN7S1424C43v46Ev();
extern void _ZN7S1424C43v47Ev();
extern void _ZN7S1424C43v48Ev();
extern void _ZN7S1424C43v49Ev();
extern void _ZN7S1424C43v50Ev();
extern void _ZN7S1424C43v51Ev();
extern void _ZN7S1424C43v52Ev();
extern void _ZN7S1424C43v53Ev();
extern void _ZN7S1424C43v54Ev();
extern void _ZN7S1424C43v55Ev();
extern void _ZN7S1424C43v56Ev();
extern void _ZN7S1424C43v57Ev();
extern void _ZN7S1424C43v58Ev();
extern void _ZN7S1424C43v59Ev();
extern void _ZN7S1424C43v60Ev();
extern void _ZN7S1424C43v61Ev();
extern void _ZN7S1424C43v62Ev();
extern void _ZN7S1424C43v63Ev();
extern void _ZN7S1424C43v64Ev();
extern void _ZN7S1424C43v65Ev();
extern void _ZN7S1424C43v66Ev();
extern void _ZN7S1424C43v67Ev();
extern void _ZN7S1424C33v68Ev();
extern void _ZN7S1424C33v69Ev();
extern void _ZN7S1424C33v70Ev();
extern void _ZN7S1424C33v71Ev();
extern void _ZN7S1424C33v72Ev();
extern void _ZN7S1424C33v73Ev();
extern void _ZN7S1424C33v74Ev();
extern void _ZN7S1424C33v75Ev();
extern void _ZN7S1424C33v76Ev();
extern void _ZN7S1424C33v77Ev();
extern void _ZN7S1424C33v78Ev();
extern void _ZN7S1424C33v79Ev();
extern void _ZN7S1424C33v80Ev();
extern void _ZN7S1424C23v81Ev();
extern void _ZN7S1424C23v82Ev();
extern void _ZN7S1424C23v83Ev();
extern void _ZN7S1424C23v84Ev();
extern void _ZN7S1424C23v85Ev();
extern void _ZN7S1424C23v86Ev();
extern void _ZN7S1424C23v87Ev();
static  VTBL_ENTRY vtc_S1424C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1424C2[0]),
  (VTBL_ENTRY)&_ZN7S1424C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1424C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1424C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1424C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1424C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1424C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1424C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1424C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1424C23v87Ev,
};
extern VTBL_ENTRY _ZTI7S1424C2[];
extern  VTBL_ENTRY _ZTV7S1424C2[];
Class_Descriptor cd_S1424C2 = {  "S1424C2", // class name
  bases_S1424C2, 2,
  &(vtc_S1424C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1424C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1424C2),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1424C1  : S1424C2 {
  ::S632C13 s1424c1f0;
  ::S632C13 s1424c1f1;
  virtual  ~S1424C1(); // _ZN7S1424C1D1Ev
  virtual void  v1(); // _ZN7S1424C12v1Ev
  virtual void  v2(); // _ZN7S1424C12v2Ev
  virtual void  v3(); // _ZN7S1424C12v3Ev
  S1424C1(); // tgen
};
//SIG(1 S1424C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 FC12 FC12}


 S1424C1 ::~S1424C1(){ note_dtor("S1424C1", this);}
void  S1424C1 ::v1(){vfunc_called(this, "_ZN7S1424C12v1Ev");}
void  S1424C1 ::v2(){vfunc_called(this, "_ZN7S1424C12v2Ev");}
void  S1424C1 ::v3(){vfunc_called(this, "_ZN7S1424C12v3Ev");}
S1424C1 ::S1424C1(){ note_ctor("S1424C1", this);} // tgen

static void Test_S1424C1()
{
  extern Class_Descriptor cd_S1424C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,56)];
    init_test(&cd_S1424C1, buf);
    S1424C1 *dp, &lv = *(dp=new (buf) S1424C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,220), "sizeof(S1424C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1424C1)");
    check_base_class_offset(lv, (S1424C4*)(S1424C3*)(S1424C2*), 0, "S1424C1");
    check_base_class_offset(lv, (S1424C3*)(S1424C2*), 0, "S1424C1");
    check_base_class_offset(lv, (S1424C2*), 0, "S1424C1");
    check_field_offset(lv, s1424c1f0, ABISELECT(252,196), "S1424C1.s1424c1f0");
    check_field_offset(lv, s1424c1f1, ABISELECT(264,208), "S1424C1.s1424c1f1");
    test_class_info(&lv, &cd_S1424C1);
    dp->~S1424C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1424C1(Test_S1424C1, "S1424C1", ABISELECT(280,220));

#else // __cplusplus

extern void _ZN7S1424C1C1Ev();
extern void _ZN7S1424C1D1Ev();
Name_Map name_map_S1424C1[] = {
  NSPAIR(_ZN7S1424C1C1Ev),
  NSPAIR(_ZN7S1424C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1424C4;
extern VTBL_ENTRY _ZTI7S1424C4[];
extern  VTBL_ENTRY _ZTV7S1424C4[];
extern Class_Descriptor cd_S1424C3;
extern VTBL_ENTRY _ZTI7S1424C3[];
extern  VTBL_ENTRY _ZTV7S1424C3[];
extern Class_Descriptor cd_S1424C2;
extern VTBL_ENTRY _ZTI7S1424C2[];
extern  VTBL_ENTRY _ZTV7S1424C2[];
static Base_Class bases_S1424C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1424C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1424C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1424C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1424C1[];
extern void _ZN7S1424C1D1Ev();
extern void _ZN7S1424C1D0Ev();
extern void _ZN7S1424C42v4Ev();
extern void _ZN7S1424C42v5Ev();
extern void _ZN7S1424C42v6Ev();
extern void _ZN7S1424C42v7Ev();
extern void _ZN7S1424C42v8Ev();
extern void _ZN7S1424C42v9Ev();
extern void _ZN7S1424C43v10Ev();
extern void _ZN7S1424C43v11Ev();
extern void _ZN7S1424C43v12Ev();
extern void _ZN7S1424C43v13Ev();
extern void _ZN7S1424C43v14Ev();
extern void _ZN7S1424C43v15Ev();
extern void _ZN7S1424C43v16Ev();
extern void _ZN7S1424C43v17Ev();
extern void _ZN7S1424C43v18Ev();
extern void _ZN7S1424C43v19Ev();
extern void _ZN7S1424C43v20Ev();
extern void _ZN7S1424C43v21Ev();
extern void _ZN7S1424C43v22Ev();
extern void _ZN7S1424C43v23Ev();
extern void _ZN7S1424C43v24Ev();
extern void _ZN7S1424C43v25Ev();
extern void _ZN7S1424C43v26Ev();
extern void _ZN7S1424C43v27Ev();
extern void _ZN7S1424C43v28Ev();
extern void _ZN7S1424C43v29Ev();
extern void _ZN7S1424C43v30Ev();
extern void _ZN7S1424C43v31Ev();
extern void _ZN7S1424C43v32Ev();
extern void _ZN7S1424C43v33Ev();
extern void _ZN7S1424C43v34Ev();
extern void _ZN7S1424C43v35Ev();
extern void _ZN7S1424C43v36Ev();
extern void _ZN7S1424C43v37Ev();
extern void _ZN7S1424C43v38Ev();
extern void _ZN7S1424C43v39Ev();
extern void _ZN7S1424C43v40Ev();
extern void _ZN7S1424C43v41Ev();
extern void _ZN7S1424C43v42Ev();
extern void _ZN7S1424C43v43Ev();
extern void _ZN7S1424C43v44Ev();
extern void _ZN7S1424C43v45Ev();
extern void _ZN7S1424C43v46Ev();
extern void _ZN7S1424C43v47Ev();
extern void _ZN7S1424C43v48Ev();
extern void _ZN7S1424C43v49Ev();
extern void _ZN7S1424C43v50Ev();
extern void _ZN7S1424C43v51Ev();
extern void _ZN7S1424C43v52Ev();
extern void _ZN7S1424C43v53Ev();
extern void _ZN7S1424C43v54Ev();
extern void _ZN7S1424C43v55Ev();
extern void _ZN7S1424C43v56Ev();
extern void _ZN7S1424C43v57Ev();
extern void _ZN7S1424C43v58Ev();
extern void _ZN7S1424C43v59Ev();
extern void _ZN7S1424C43v60Ev();
extern void _ZN7S1424C43v61Ev();
extern void _ZN7S1424C43v62Ev();
extern void _ZN7S1424C43v63Ev();
extern void _ZN7S1424C43v64Ev();
extern void _ZN7S1424C43v65Ev();
extern void _ZN7S1424C43v66Ev();
extern void _ZN7S1424C43v67Ev();
extern void _ZN7S1424C33v68Ev();
extern void _ZN7S1424C33v69Ev();
extern void _ZN7S1424C33v70Ev();
extern void _ZN7S1424C33v71Ev();
extern void _ZN7S1424C33v72Ev();
extern void _ZN7S1424C33v73Ev();
extern void _ZN7S1424C33v74Ev();
extern void _ZN7S1424C33v75Ev();
extern void _ZN7S1424C33v76Ev();
extern void _ZN7S1424C33v77Ev();
extern void _ZN7S1424C33v78Ev();
extern void _ZN7S1424C33v79Ev();
extern void _ZN7S1424C33v80Ev();
extern void _ZN7S1424C23v81Ev();
extern void _ZN7S1424C23v82Ev();
extern void _ZN7S1424C23v83Ev();
extern void _ZN7S1424C23v84Ev();
extern void _ZN7S1424C23v85Ev();
extern void _ZN7S1424C23v86Ev();
extern void _ZN7S1424C23v87Ev();
extern void _ZN7S1424C12v1Ev();
extern void _ZN7S1424C12v2Ev();
extern void _ZN7S1424C12v3Ev();
static  VTBL_ENTRY vtc_S1424C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1424C1[0]),
  (VTBL_ENTRY)&_ZN7S1424C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1424C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1424C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1424C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1424C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1424C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1424C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1424C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1424C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1424C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1424C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1424C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1424C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1424C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1424C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1424C1[];
extern  VTBL_ENTRY _ZTV7S1424C1[];
Class_Descriptor cd_S1424C1 = {  "S1424C1", // class name
  bases_S1424C1, 3,
  &(vtc_S1424C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,220), // object size
  NSPAIRA(_ZTI7S1424C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1424C1),91, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1425C4  {
  int s1425c4f0;
  __tsi64 s1425c4f1;
  void *s1425c4f2[4];
  int s1425c4f3[2];
  void *s1425c4f4;
  ::S3432C14_nt s1425c4f5;
  void *s1425c4f6[2];
  virtual  ~S1425C4(); // _ZN7S1425C4D1Ev
  virtual void  v4(); // _ZN7S1425C42v4Ev
  virtual void  v5(); // _ZN7S1425C42v5Ev
  virtual void  v6(); // _ZN7S1425C42v6Ev
  virtual void  v7(); // _ZN7S1425C42v7Ev
  virtual void  v8(); // _ZN7S1425C42v8Ev
  virtual void  v9(); // _ZN7S1425C42v9Ev
  virtual void  v10(); // _ZN7S1425C43v10Ev
  virtual void  v11(); // _ZN7S1425C43v11Ev
  virtual void  v12(); // _ZN7S1425C43v12Ev
  virtual void  v13(); // _ZN7S1425C43v13Ev
  virtual void  v14(); // _ZN7S1425C43v14Ev
  virtual void  v15(); // _ZN7S1425C43v15Ev
  virtual void  v16(); // _ZN7S1425C43v16Ev
  virtual void  v17(); // _ZN7S1425C43v17Ev
  virtual void  v18(); // _ZN7S1425C43v18Ev
  virtual void  v19(); // _ZN7S1425C43v19Ev
  virtual void  v20(); // _ZN7S1425C43v20Ev
  virtual void  v21(); // _ZN7S1425C43v21Ev
  virtual void  v22(); // _ZN7S1425C43v22Ev
  virtual void  v23(); // _ZN7S1425C43v23Ev
  virtual void  v24(); // _ZN7S1425C43v24Ev
  virtual void  v25(); // _ZN7S1425C43v25Ev
  virtual void  v26(); // _ZN7S1425C43v26Ev
  virtual void  v27(); // _ZN7S1425C43v27Ev
  virtual void  v28(); // _ZN7S1425C43v28Ev
  virtual void  v29(); // _ZN7S1425C43v29Ev
  virtual void  v30(); // _ZN7S1425C43v30Ev
  virtual void  v31(); // _ZN7S1425C43v31Ev
  virtual void  v32(); // _ZN7S1425C43v32Ev
  virtual void  v33(); // _ZN7S1425C43v33Ev
  virtual void  v34(); // _ZN7S1425C43v34Ev
  virtual void  v35(); // _ZN7S1425C43v35Ev
  virtual void  v36(); // _ZN7S1425C43v36Ev
  virtual void  v37(); // _ZN7S1425C43v37Ev
  virtual void  v38(); // _ZN7S1425C43v38Ev
  virtual void  v39(); // _ZN7S1425C43v39Ev
  virtual void  v40(); // _ZN7S1425C43v40Ev
  virtual void  v41(); // _ZN7S1425C43v41Ev
  virtual void  v42(); // _ZN7S1425C43v42Ev
  virtual void  v43(); // _ZN7S1425C43v43Ev
  virtual void  v44(); // _ZN7S1425C43v44Ev
  virtual void  v45(); // _ZN7S1425C43v45Ev
  virtual void  v46(); // _ZN7S1425C43v46Ev
  virtual void  v47(); // _ZN7S1425C43v47Ev
  virtual void  v48(); // _ZN7S1425C43v48Ev
  virtual void  v49(); // _ZN7S1425C43v49Ev
  virtual void  v50(); // _ZN7S1425C43v50Ev
  virtual void  v51(); // _ZN7S1425C43v51Ev
  virtual void  v52(); // _ZN7S1425C43v52Ev
  virtual void  v53(); // _ZN7S1425C43v53Ev
  virtual void  v54(); // _ZN7S1425C43v54Ev
  virtual void  v55(); // _ZN7S1425C43v55Ev
  virtual void  v56(); // _ZN7S1425C43v56Ev
  virtual void  v57(); // _ZN7S1425C43v57Ev
  virtual void  v58(); // _ZN7S1425C43v58Ev
  virtual void  v59(); // _ZN7S1425C43v59Ev
  virtual void  v60(); // _ZN7S1425C43v60Ev
  virtual void  v61(); // _ZN7S1425C43v61Ev
  virtual void  v62(); // _ZN7S1425C43v62Ev
  virtual void  v63(); // _ZN7S1425C43v63Ev
  virtual void  v64(); // _ZN7S1425C43v64Ev
  virtual void  v65(); // _ZN7S1425C43v65Ev
  virtual void  v66(); // _ZN7S1425C43v66Ev
  virtual void  v67(); // _ZN7S1425C43v67Ev
  S1425C4(); // tgen
};
//SIG(-1 S1425C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1425C4 ::~S1425C4(){ note_dtor("S1425C4", this);}
void  S1425C4 ::v4(){vfunc_called(this, "_ZN7S1425C42v4Ev");}
void  S1425C4 ::v5(){vfunc_called(this, "_ZN7S1425C42v5Ev");}
void  S1425C4 ::v6(){vfunc_called(this, "_ZN7S1425C42v6Ev");}
void  S1425C4 ::v7(){vfunc_called(this, "_ZN7S1425C42v7Ev");}
void  S1425C4 ::v8(){vfunc_called(this, "_ZN7S1425C42v8Ev");}
void  S1425C4 ::v9(){vfunc_called(this, "_ZN7S1425C42v9Ev");}
void  S1425C4 ::v10(){vfunc_called(this, "_ZN7S1425C43v10Ev");}
void  S1425C4 ::v11(){vfunc_called(this, "_ZN7S1425C43v11Ev");}
void  S1425C4 ::v12(){vfunc_called(this, "_ZN7S1425C43v12Ev");}
void  S1425C4 ::v13(){vfunc_called(this, "_ZN7S1425C43v13Ev");}
void  S1425C4 ::v14(){vfunc_called(this, "_ZN7S1425C43v14Ev");}
void  S1425C4 ::v15(){vfunc_called(this, "_ZN7S1425C43v15Ev");}
void  S1425C4 ::v16(){vfunc_called(this, "_ZN7S1425C43v16Ev");}
void  S1425C4 ::v17(){vfunc_called(this, "_ZN7S1425C43v17Ev");}
void  S1425C4 ::v18(){vfunc_called(this, "_ZN7S1425C43v18Ev");}
void  S1425C4 ::v19(){vfunc_called(this, "_ZN7S1425C43v19Ev");}
void  S1425C4 ::v20(){vfunc_called(this, "_ZN7S1425C43v20Ev");}
void  S1425C4 ::v21(){vfunc_called(this, "_ZN7S1425C43v21Ev");}
void  S1425C4 ::v22(){vfunc_called(this, "_ZN7S1425C43v22Ev");}
void  S1425C4 ::v23(){vfunc_called(this, "_ZN7S1425C43v23Ev");}
void  S1425C4 ::v24(){vfunc_called(this, "_ZN7S1425C43v24Ev");}
void  S1425C4 ::v25(){vfunc_called(this, "_ZN7S1425C43v25Ev");}
void  S1425C4 ::v26(){vfunc_called(this, "_ZN7S1425C43v26Ev");}
void  S1425C4 ::v27(){vfunc_called(this, "_ZN7S1425C43v27Ev");}
void  S1425C4 ::v28(){vfunc_called(this, "_ZN7S1425C43v28Ev");}
void  S1425C4 ::v29(){vfunc_called(this, "_ZN7S1425C43v29Ev");}
void  S1425C4 ::v30(){vfunc_called(this, "_ZN7S1425C43v30Ev");}
void  S1425C4 ::v31(){vfunc_called(this, "_ZN7S1425C43v31Ev");}
void  S1425C4 ::v32(){vfunc_called(this, "_ZN7S1425C43v32Ev");}
void  S1425C4 ::v33(){vfunc_called(this, "_ZN7S1425C43v33Ev");}
void  S1425C4 ::v34(){vfunc_called(this, "_ZN7S1425C43v34Ev");}
void  S1425C4 ::v35(){vfunc_called(this, "_ZN7S1425C43v35Ev");}
void  S1425C4 ::v36(){vfunc_called(this, "_ZN7S1425C43v36Ev");}
void  S1425C4 ::v37(){vfunc_called(this, "_ZN7S1425C43v37Ev");}
void  S1425C4 ::v38(){vfunc_called(this, "_ZN7S1425C43v38Ev");}
void  S1425C4 ::v39(){vfunc_called(this, "_ZN7S1425C43v39Ev");}
void  S1425C4 ::v40(){vfunc_called(this, "_ZN7S1425C43v40Ev");}
void  S1425C4 ::v41(){vfunc_called(this, "_ZN7S1425C43v41Ev");}
void  S1425C4 ::v42(){vfunc_called(this, "_ZN7S1425C43v42Ev");}
void  S1425C4 ::v43(){vfunc_called(this, "_ZN7S1425C43v43Ev");}
void  S1425C4 ::v44(){vfunc_called(this, "_ZN7S1425C43v44Ev");}
void  S1425C4 ::v45(){vfunc_called(this, "_ZN7S1425C43v45Ev");}
void  S1425C4 ::v46(){vfunc_called(this, "_ZN7S1425C43v46Ev");}
void  S1425C4 ::v47(){vfunc_called(this, "_ZN7S1425C43v47Ev");}
void  S1425C4 ::v48(){vfunc_called(this, "_ZN7S1425C43v48Ev");}
void  S1425C4 ::v49(){vfunc_called(this, "_ZN7S1425C43v49Ev");}
void  S1425C4 ::v50(){vfunc_called(this, "_ZN7S1425C43v50Ev");}
void  S1425C4 ::v51(){vfunc_called(this, "_ZN7S1425C43v51Ev");}
void  S1425C4 ::v52(){vfunc_called(this, "_ZN7S1425C43v52Ev");}
void  S1425C4 ::v53(){vfunc_called(this, "_ZN7S1425C43v53Ev");}
void  S1425C4 ::v54(){vfunc_called(this, "_ZN7S1425C43v54Ev");}
void  S1425C4 ::v55(){vfunc_called(this, "_ZN7S1425C43v55Ev");}
void  S1425C4 ::v56(){vfunc_called(this, "_ZN7S1425C43v56Ev");}
void  S1425C4 ::v57(){vfunc_called(this, "_ZN7S1425C43v57Ev");}
void  S1425C4 ::v58(){vfunc_called(this, "_ZN7S1425C43v58Ev");}
void  S1425C4 ::v59(){vfunc_called(this, "_ZN7S1425C43v59Ev");}
void  S1425C4 ::v60(){vfunc_called(this, "_ZN7S1425C43v60Ev");}
void  S1425C4 ::v61(){vfunc_called(this, "_ZN7S1425C43v61Ev");}
void  S1425C4 ::v62(){vfunc_called(this, "_ZN7S1425C43v62Ev");}
void  S1425C4 ::v63(){vfunc_called(this, "_ZN7S1425C43v63Ev");}
void  S1425C4 ::v64(){vfunc_called(this, "_ZN7S1425C43v64Ev");}
void  S1425C4 ::v65(){vfunc_called(this, "_ZN7S1425C43v65Ev");}
void  S1425C4 ::v66(){vfunc_called(this, "_ZN7S1425C43v66Ev");}
void  S1425C4 ::v67(){vfunc_called(this, "_ZN7S1425C43v67Ev");}
S1425C4 ::S1425C4(){ note_ctor("S1425C4", this);} // tgen

static void Test_S1425C4()
{
  extern Class_Descriptor cd_S1425C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1425C4, buf);
    S1425C4 *dp, &lv = *(dp=new (buf) S1425C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1425C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1425C4)");
    check_field_offset(lv, s1425c4f0, ABISELECT(8,4), "S1425C4.s1425c4f0");
    check_field_offset(lv, s1425c4f1, ABISELECT(16,8), "S1425C4.s1425c4f1");
    check_field_offset(lv, s1425c4f2, ABISELECT(24,16), "S1425C4.s1425c4f2");
    check_field_offset(lv, s1425c4f3, ABISELECT(56,32), "S1425C4.s1425c4f3");
    check_field_offset(lv, s1425c4f4, ABISELECT(64,40), "S1425C4.s1425c4f4");
    check_field_offset(lv, s1425c4f5, ABISELECT(72,44), "S1425C4.s1425c4f5");
    check_field_offset(lv, s1425c4f6, ABISELECT(80,52), "S1425C4.s1425c4f6");
    test_class_info(&lv, &cd_S1425C4);
    dp->~S1425C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1425C4(Test_S1425C4, "S1425C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1425C4C1Ev();
extern void _ZN7S1425C4D1Ev();
Name_Map name_map_S1425C4[] = {
  NSPAIR(_ZN7S1425C4C1Ev),
  NSPAIR(_ZN7S1425C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1425C4[];
extern void _ZN7S1425C4D1Ev();
extern void _ZN7S1425C4D0Ev();
extern void _ZN7S1425C42v4Ev();
extern void _ZN7S1425C42v5Ev();
extern void _ZN7S1425C42v6Ev();
extern void _ZN7S1425C42v7Ev();
extern void _ZN7S1425C42v8Ev();
extern void _ZN7S1425C42v9Ev();
extern void _ZN7S1425C43v10Ev();
extern void _ZN7S1425C43v11Ev();
extern void _ZN7S1425C43v12Ev();
extern void _ZN7S1425C43v13Ev();
extern void _ZN7S1425C43v14Ev();
extern void _ZN7S1425C43v15Ev();
extern void _ZN7S1425C43v16Ev();
extern void _ZN7S1425C43v17Ev();
extern void _ZN7S1425C43v18Ev();
extern void _ZN7S1425C43v19Ev();
extern void _ZN7S1425C43v20Ev();
extern void _ZN7S1425C43v21Ev();
extern void _ZN7S1425C43v22Ev();
extern void _ZN7S1425C43v23Ev();
extern void _ZN7S1425C43v24Ev();
extern void _ZN7S1425C43v25Ev();
extern void _ZN7S1425C43v26Ev();
extern void _ZN7S1425C43v27Ev();
extern void _ZN7S1425C43v28Ev();
extern void _ZN7S1425C43v29Ev();
extern void _ZN7S1425C43v30Ev();
extern void _ZN7S1425C43v31Ev();
extern void _ZN7S1425C43v32Ev();
extern void _ZN7S1425C43v33Ev();
extern void _ZN7S1425C43v34Ev();
extern void _ZN7S1425C43v35Ev();
extern void _ZN7S1425C43v36Ev();
extern void _ZN7S1425C43v37Ev();
extern void _ZN7S1425C43v38Ev();
extern void _ZN7S1425C43v39Ev();
extern void _ZN7S1425C43v40Ev();
extern void _ZN7S1425C43v41Ev();
extern void _ZN7S1425C43v42Ev();
extern void _ZN7S1425C43v43Ev();
extern void _ZN7S1425C43v44Ev();
extern void _ZN7S1425C43v45Ev();
extern void _ZN7S1425C43v46Ev();
extern void _ZN7S1425C43v47Ev();
extern void _ZN7S1425C43v48Ev();
extern void _ZN7S1425C43v49Ev();
extern void _ZN7S1425C43v50Ev();
extern void _ZN7S1425C43v51Ev();
extern void _ZN7S1425C43v52Ev();
extern void _ZN7S1425C43v53Ev();
extern void _ZN7S1425C43v54Ev();
extern void _ZN7S1425C43v55Ev();
extern void _ZN7S1425C43v56Ev();
extern void _ZN7S1425C43v57Ev();
extern void _ZN7S1425C43v58Ev();
extern void _ZN7S1425C43v59Ev();
extern void _ZN7S1425C43v60Ev();
extern void _ZN7S1425C43v61Ev();
extern void _ZN7S1425C43v62Ev();
extern void _ZN7S1425C43v63Ev();
extern void _ZN7S1425C43v64Ev();
extern void _ZN7S1425C43v65Ev();
extern void _ZN7S1425C43v66Ev();
extern void _ZN7S1425C43v67Ev();
static  VTBL_ENTRY vtc_S1425C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1425C4[0]),
  (VTBL_ENTRY)&_ZN7S1425C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1425C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v67Ev,
};
extern VTBL_ENTRY _ZTI7S1425C4[];
extern  VTBL_ENTRY _ZTV7S1425C4[];
Class_Descriptor cd_S1425C4 = {  "S1425C4", // class name
  0,0,//no base classes
  &(vtc_S1425C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1425C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1425C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1425C3  : S1425C4 {
  void *s1425c3f0;
  ::S3432C14_nt s1425c3f1;
  int s1425c3f2[5];
  unsigned int s1425c3f3:1;
  unsigned int s1425c3f4:1;
  unsigned int s1425c3f5:1;
  unsigned int s1425c3f6:1;
  unsigned int s1425c3f7:1;
  ::S273C21 s1425c3f8;
  ::S273C17 s1425c3f9;
  unsigned int s1425c3f10:1;
  int s1425c3f11[2];
  void *s1425c3f12;
  int s1425c3f13[3];
  virtual  ~S1425C3(); // _ZN7S1425C3D1Ev
  virtual void  v68(); // _ZN7S1425C33v68Ev
  virtual void  v69(); // _ZN7S1425C33v69Ev
  virtual void  v70(); // _ZN7S1425C33v70Ev
  virtual void  v71(); // _ZN7S1425C33v71Ev
  virtual void  v72(); // _ZN7S1425C33v72Ev
  virtual void  v73(); // _ZN7S1425C33v73Ev
  virtual void  v74(); // _ZN7S1425C33v74Ev
  virtual void  v75(); // _ZN7S1425C33v75Ev
  virtual void  v76(); // _ZN7S1425C33v76Ev
  virtual void  v77(); // _ZN7S1425C33v77Ev
  virtual void  v78(); // _ZN7S1425C33v78Ev
  virtual void  v79(); // _ZN7S1425C33v79Ev
  virtual void  v80(); // _ZN7S1425C33v80Ev
  S1425C3(); // tgen
};
//SIG(-1 S1425C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1425C3 ::~S1425C3(){ note_dtor("S1425C3", this);}
void  S1425C3 ::v68(){vfunc_called(this, "_ZN7S1425C33v68Ev");}
void  S1425C3 ::v69(){vfunc_called(this, "_ZN7S1425C33v69Ev");}
void  S1425C3 ::v70(){vfunc_called(this, "_ZN7S1425C33v70Ev");}
void  S1425C3 ::v71(){vfunc_called(this, "_ZN7S1425C33v71Ev");}
void  S1425C3 ::v72(){vfunc_called(this, "_ZN7S1425C33v72Ev");}
void  S1425C3 ::v73(){vfunc_called(this, "_ZN7S1425C33v73Ev");}
void  S1425C3 ::v74(){vfunc_called(this, "_ZN7S1425C33v74Ev");}
void  S1425C3 ::v75(){vfunc_called(this, "_ZN7S1425C33v75Ev");}
void  S1425C3 ::v76(){vfunc_called(this, "_ZN7S1425C33v76Ev");}
void  S1425C3 ::v77(){vfunc_called(this, "_ZN7S1425C33v77Ev");}
void  S1425C3 ::v78(){vfunc_called(this, "_ZN7S1425C33v78Ev");}
void  S1425C3 ::v79(){vfunc_called(this, "_ZN7S1425C33v79Ev");}
void  S1425C3 ::v80(){vfunc_called(this, "_ZN7S1425C33v80Ev");}
S1425C3 ::S1425C3(){ note_ctor("S1425C3", this);} // tgen

static void Test_S1425C3()
{
  extern Class_Descriptor cd_S1425C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1425C3, buf);
    S1425C3 *dp, &lv = *(dp=new (buf) S1425C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1425C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1425C3)");
    check_base_class_offset(lv, (S1425C4*), 0, "S1425C3");
    check_field_offset(lv, s1425c3f0, ABISELECT(96,60), "S1425C3.s1425c3f0");
    check_field_offset(lv, s1425c3f1, ABISELECT(104,64), "S1425C3.s1425c3f1");
    check_field_offset(lv, s1425c3f2, ABISELECT(112,72), "S1425C3.s1425c3f2");
    set_bf_and_test(lv, s1425c3f3, ABISELECT(132,92), 0, 1, 1, "S1425C3");
    set_bf_and_test(lv, s1425c3f4, ABISELECT(132,92), 1, 1, 1, "S1425C3");
    set_bf_and_test(lv, s1425c3f5, ABISELECT(132,92), 2, 1, 1, "S1425C3");
    set_bf_and_test(lv, s1425c3f6, ABISELECT(132,92), 3, 1, 1, "S1425C3");
    set_bf_and_test(lv, s1425c3f7, ABISELECT(132,92), 4, 1, 1, "S1425C3");
    check_field_offset(lv, s1425c3f8, ABISELECT(136,96), "S1425C3.s1425c3f8");
    check_field_offset(lv, s1425c3f9, ABISELECT(152,108), "S1425C3.s1425c3f9");
    set_bf_and_test(lv, s1425c3f10, ABISELECT(168,120), 0, 1, 1, "S1425C3");
    check_field_offset(lv, s1425c3f11, ABISELECT(172,124), "S1425C3.s1425c3f11");
    check_field_offset(lv, s1425c3f12, ABISELECT(184,132), "S1425C3.s1425c3f12");
    check_field_offset(lv, s1425c3f13, ABISELECT(192,136), "S1425C3.s1425c3f13");
    test_class_info(&lv, &cd_S1425C3);
    dp->~S1425C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1425C3(Test_S1425C3, "S1425C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1425C3C1Ev();
extern void _ZN7S1425C3D1Ev();
Name_Map name_map_S1425C3[] = {
  NSPAIR(_ZN7S1425C3C1Ev),
  NSPAIR(_ZN7S1425C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1425C4;
extern VTBL_ENTRY _ZTI7S1425C4[];
extern  VTBL_ENTRY _ZTV7S1425C4[];
static Base_Class bases_S1425C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1425C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1425C3[];
extern void _ZN7S1425C3D1Ev();
extern void _ZN7S1425C3D0Ev();
extern void _ZN7S1425C42v4Ev();
extern void _ZN7S1425C42v5Ev();
extern void _ZN7S1425C42v6Ev();
extern void _ZN7S1425C42v7Ev();
extern void _ZN7S1425C42v8Ev();
extern void _ZN7S1425C42v9Ev();
extern void _ZN7S1425C43v10Ev();
extern void _ZN7S1425C43v11Ev();
extern void _ZN7S1425C43v12Ev();
extern void _ZN7S1425C43v13Ev();
extern void _ZN7S1425C43v14Ev();
extern void _ZN7S1425C43v15Ev();
extern void _ZN7S1425C43v16Ev();
extern void _ZN7S1425C43v17Ev();
extern void _ZN7S1425C43v18Ev();
extern void _ZN7S1425C43v19Ev();
extern void _ZN7S1425C43v20Ev();
extern void _ZN7S1425C43v21Ev();
extern void _ZN7S1425C43v22Ev();
extern void _ZN7S1425C43v23Ev();
extern void _ZN7S1425C43v24Ev();
extern void _ZN7S1425C43v25Ev();
extern void _ZN7S1425C43v26Ev();
extern void _ZN7S1425C43v27Ev();
extern void _ZN7S1425C43v28Ev();
extern void _ZN7S1425C43v29Ev();
extern void _ZN7S1425C43v30Ev();
extern void _ZN7S1425C43v31Ev();
extern void _ZN7S1425C43v32Ev();
extern void _ZN7S1425C43v33Ev();
extern void _ZN7S1425C43v34Ev();
extern void _ZN7S1425C43v35Ev();
extern void _ZN7S1425C43v36Ev();
extern void _ZN7S1425C43v37Ev();
extern void _ZN7S1425C43v38Ev();
extern void _ZN7S1425C43v39Ev();
extern void _ZN7S1425C43v40Ev();
extern void _ZN7S1425C43v41Ev();
extern void _ZN7S1425C43v42Ev();
extern void _ZN7S1425C43v43Ev();
extern void _ZN7S1425C43v44Ev();
extern void _ZN7S1425C43v45Ev();
extern void _ZN7S1425C43v46Ev();
extern void _ZN7S1425C43v47Ev();
extern void _ZN7S1425C43v48Ev();
extern void _ZN7S1425C43v49Ev();
extern void _ZN7S1425C43v50Ev();
extern void _ZN7S1425C43v51Ev();
extern void _ZN7S1425C43v52Ev();
extern void _ZN7S1425C43v53Ev();
extern void _ZN7S1425C43v54Ev();
extern void _ZN7S1425C43v55Ev();
extern void _ZN7S1425C43v56Ev();
extern void _ZN7S1425C43v57Ev();
extern void _ZN7S1425C43v58Ev();
extern void _ZN7S1425C43v59Ev();
extern void _ZN7S1425C43v60Ev();
extern void _ZN7S1425C43v61Ev();
extern void _ZN7S1425C43v62Ev();
extern void _ZN7S1425C43v63Ev();
extern void _ZN7S1425C43v64Ev();
extern void _ZN7S1425C43v65Ev();
extern void _ZN7S1425C43v66Ev();
extern void _ZN7S1425C43v67Ev();
extern void _ZN7S1425C33v68Ev();
extern void _ZN7S1425C33v69Ev();
extern void _ZN7S1425C33v70Ev();
extern void _ZN7S1425C33v71Ev();
extern void _ZN7S1425C33v72Ev();
extern void _ZN7S1425C33v73Ev();
extern void _ZN7S1425C33v74Ev();
extern void _ZN7S1425C33v75Ev();
extern void _ZN7S1425C33v76Ev();
extern void _ZN7S1425C33v77Ev();
extern void _ZN7S1425C33v78Ev();
extern void _ZN7S1425C33v79Ev();
extern void _ZN7S1425C33v80Ev();
static  VTBL_ENTRY vtc_S1425C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1425C3[0]),
  (VTBL_ENTRY)&_ZN7S1425C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1425C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S1425C3[];
extern  VTBL_ENTRY _ZTV7S1425C3[];
Class_Descriptor cd_S1425C3 = {  "S1425C3", // class name
  bases_S1425C3, 1,
  &(vtc_S1425C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1425C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1425C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1425C2  : S1425C3 {
  unsigned int s1425c2f0:1;
  unsigned int s1425c2f1:1;
  unsigned int s1425c2f2:1;
  unsigned int s1425c2f3:1;
  ::S664C12_nt s1425c2f4;
  char s1425c2f5[2];
  ::S3432C14_nt s1425c2f6;
  ::S632C13 s1425c2f7;
  ::S3432C14_nt s1425c2f8;
  virtual  ~S1425C2(); // _ZN7S1425C2D1Ev
  virtual void  v81(); // _ZN7S1425C23v81Ev
  virtual void  v82(); // _ZN7S1425C23v82Ev
  virtual void  v83(); // _ZN7S1425C23v83Ev
  virtual void  v84(); // _ZN7S1425C23v84Ev
  virtual void  v85(); // _ZN7S1425C23v85Ev
  virtual void  v86(); // _ZN7S1425C23v86Ev
  virtual void  v87(); // _ZN7S1425C23v87Ev
  S1425C2(); // tgen
};
//SIG(-1 S1425C2) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S1425C2 ::~S1425C2(){ note_dtor("S1425C2", this);}
void  S1425C2 ::v81(){vfunc_called(this, "_ZN7S1425C23v81Ev");}
void  S1425C2 ::v82(){vfunc_called(this, "_ZN7S1425C23v82Ev");}
void  S1425C2 ::v83(){vfunc_called(this, "_ZN7S1425C23v83Ev");}
void  S1425C2 ::v84(){vfunc_called(this, "_ZN7S1425C23v84Ev");}
void  S1425C2 ::v85(){vfunc_called(this, "_ZN7S1425C23v85Ev");}
void  S1425C2 ::v86(){vfunc_called(this, "_ZN7S1425C23v86Ev");}
void  S1425C2 ::v87(){vfunc_called(this, "_ZN7S1425C23v87Ev");}
S1425C2 ::S1425C2(){ note_ctor("S1425C2", this);} // tgen

static void Test_S1425C2()
{
  extern Class_Descriptor cd_S1425C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1425C2, buf);
    S1425C2 *dp, &lv = *(dp=new (buf) S1425C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1425C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1425C2)");
    check_base_class_offset(lv, (S1425C4*)(S1425C3*), 0, "S1425C2");
    check_base_class_offset(lv, (S1425C3*), 0, "S1425C2");
    set_bf_and_test(lv, s1425c2f0, ABISELECT(204,148), 0, 1, 1, "S1425C2");
    set_bf_and_test(lv, s1425c2f1, ABISELECT(204,148), 1, 1, 1, "S1425C2");
    set_bf_and_test(lv, s1425c2f2, ABISELECT(204,148), 2, 1, 1, "S1425C2");
    set_bf_and_test(lv, s1425c2f3, ABISELECT(204,148), 3, 1, 1, "S1425C2");
    check_field_offset(lv, s1425c2f4, ABISELECT(208,152), "S1425C2.s1425c2f4");
    check_field_offset(lv, s1425c2f5, ABISELECT(220,164), "S1425C2.s1425c2f5");
    check_field_offset(lv, s1425c2f6, ABISELECT(224,168), "S1425C2.s1425c2f6");
    check_field_offset(lv, s1425c2f7, ABISELECT(232,176), "S1425C2.s1425c2f7");
    check_field_offset(lv, s1425c2f8, ABISELECT(244,188), "S1425C2.s1425c2f8");
    test_class_info(&lv, &cd_S1425C2);
    dp->~S1425C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1425C2(Test_S1425C2, "S1425C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1425C2C1Ev();
extern void _ZN7S1425C2D1Ev();
Name_Map name_map_S1425C2[] = {
  NSPAIR(_ZN7S1425C2C1Ev),
  NSPAIR(_ZN7S1425C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1425C4;
extern VTBL_ENTRY _ZTI7S1425C4[];
extern  VTBL_ENTRY _ZTV7S1425C4[];
extern Class_Descriptor cd_S1425C3;
extern VTBL_ENTRY _ZTI7S1425C3[];
extern  VTBL_ENTRY _ZTV7S1425C3[];
static Base_Class bases_S1425C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1425C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1425C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1425C2[];
extern void _ZN7S1425C2D1Ev();
extern void _ZN7S1425C2D0Ev();
extern void _ZN7S1425C42v4Ev();
extern void _ZN7S1425C42v5Ev();
extern void _ZN7S1425C42v6Ev();
extern void _ZN7S1425C42v7Ev();
extern void _ZN7S1425C42v8Ev();
extern void _ZN7S1425C42v9Ev();
extern void _ZN7S1425C43v10Ev();
extern void _ZN7S1425C43v11Ev();
extern void _ZN7S1425C43v12Ev();
extern void _ZN7S1425C43v13Ev();
extern void _ZN7S1425C43v14Ev();
extern void _ZN7S1425C43v15Ev();
extern void _ZN7S1425C43v16Ev();
extern void _ZN7S1425C43v17Ev();
extern void _ZN7S1425C43v18Ev();
extern void _ZN7S1425C43v19Ev();
extern void _ZN7S1425C43v20Ev();
extern void _ZN7S1425C43v21Ev();
extern void _ZN7S1425C43v22Ev();
extern void _ZN7S1425C43v23Ev();
extern void _ZN7S1425C43v24Ev();
extern void _ZN7S1425C43v25Ev();
extern void _ZN7S1425C43v26Ev();
extern void _ZN7S1425C43v27Ev();
extern void _ZN7S1425C43v28Ev();
extern void _ZN7S1425C43v29Ev();
extern void _ZN7S1425C43v30Ev();
extern void _ZN7S1425C43v31Ev();
extern void _ZN7S1425C43v32Ev();
extern void _ZN7S1425C43v33Ev();
extern void _ZN7S1425C43v34Ev();
extern void _ZN7S1425C43v35Ev();
extern void _ZN7S1425C43v36Ev();
extern void _ZN7S1425C43v37Ev();
extern void _ZN7S1425C43v38Ev();
extern void _ZN7S1425C43v39Ev();
extern void _ZN7S1425C43v40Ev();
extern void _ZN7S1425C43v41Ev();
extern void _ZN7S1425C43v42Ev();
extern void _ZN7S1425C43v43Ev();
extern void _ZN7S1425C43v44Ev();
extern void _ZN7S1425C43v45Ev();
extern void _ZN7S1425C43v46Ev();
extern void _ZN7S1425C43v47Ev();
extern void _ZN7S1425C43v48Ev();
extern void _ZN7S1425C43v49Ev();
extern void _ZN7S1425C43v50Ev();
extern void _ZN7S1425C43v51Ev();
extern void _ZN7S1425C43v52Ev();
extern void _ZN7S1425C43v53Ev();
extern void _ZN7S1425C43v54Ev();
extern void _ZN7S1425C43v55Ev();
extern void _ZN7S1425C43v56Ev();
extern void _ZN7S1425C43v57Ev();
extern void _ZN7S1425C43v58Ev();
extern void _ZN7S1425C43v59Ev();
extern void _ZN7S1425C43v60Ev();
extern void _ZN7S1425C43v61Ev();
extern void _ZN7S1425C43v62Ev();
extern void _ZN7S1425C43v63Ev();
extern void _ZN7S1425C43v64Ev();
extern void _ZN7S1425C43v65Ev();
extern void _ZN7S1425C43v66Ev();
extern void _ZN7S1425C43v67Ev();
extern void _ZN7S1425C33v68Ev();
extern void _ZN7S1425C33v69Ev();
extern void _ZN7S1425C33v70Ev();
extern void _ZN7S1425C33v71Ev();
extern void _ZN7S1425C33v72Ev();
extern void _ZN7S1425C33v73Ev();
extern void _ZN7S1425C33v74Ev();
extern void _ZN7S1425C33v75Ev();
extern void _ZN7S1425C33v76Ev();
extern void _ZN7S1425C33v77Ev();
extern void _ZN7S1425C33v78Ev();
extern void _ZN7S1425C33v79Ev();
extern void _ZN7S1425C33v80Ev();
extern void _ZN7S1425C23v81Ev();
extern void _ZN7S1425C23v82Ev();
extern void _ZN7S1425C23v83Ev();
extern void _ZN7S1425C23v84Ev();
extern void _ZN7S1425C23v85Ev();
extern void _ZN7S1425C23v86Ev();
extern void _ZN7S1425C23v87Ev();
static  VTBL_ENTRY vtc_S1425C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1425C2[0]),
  (VTBL_ENTRY)&_ZN7S1425C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1425C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1425C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1425C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1425C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1425C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1425C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1425C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1425C23v87Ev,
};
extern VTBL_ENTRY _ZTI7S1425C2[];
extern  VTBL_ENTRY _ZTV7S1425C2[];
Class_Descriptor cd_S1425C2 = {  "S1425C2", // class name
  bases_S1425C2, 2,
  &(vtc_S1425C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1425C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1425C2),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1425C1  : S1425C2 {
  int s1425c1f0;
  ::S664C12_nt s1425c1f1;
  virtual  ~S1425C1(); // _ZN7S1425C1D1Ev
  virtual void  v1(); // _ZN7S1425C12v1Ev
  virtual void  v2(); // _ZN7S1425C12v2Ev
  virtual void  v3(); // _ZN7S1425C12v3Ev
  S1425C1(); // tgen
};
//SIG(1 S1425C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 Fi FC11}


 S1425C1 ::~S1425C1(){ note_dtor("S1425C1", this);}
void  S1425C1 ::v1(){vfunc_called(this, "_ZN7S1425C12v1Ev");}
void  S1425C1 ::v2(){vfunc_called(this, "_ZN7S1425C12v2Ev");}
void  S1425C1 ::v3(){vfunc_called(this, "_ZN7S1425C12v3Ev");}
S1425C1 ::S1425C1(){ note_ctor("S1425C1", this);} // tgen

static void Test_S1425C1()
{
  extern Class_Descriptor cd_S1425C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,54)];
    init_test(&cd_S1425C1, buf);
    S1425C1 *dp, &lv = *(dp=new (buf) S1425C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,212), "sizeof(S1425C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1425C1)");
    check_base_class_offset(lv, (S1425C4*)(S1425C3*)(S1425C2*), 0, "S1425C1");
    check_base_class_offset(lv, (S1425C3*)(S1425C2*), 0, "S1425C1");
    check_base_class_offset(lv, (S1425C2*), 0, "S1425C1");
    check_field_offset(lv, s1425c1f0, ABISELECT(252,196), "S1425C1.s1425c1f0");
    check_field_offset(lv, s1425c1f1, ABISELECT(256,200), "S1425C1.s1425c1f1");
    test_class_info(&lv, &cd_S1425C1);
    dp->~S1425C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1425C1(Test_S1425C1, "S1425C1", ABISELECT(272,212));

#else // __cplusplus

extern void _ZN7S1425C1C1Ev();
extern void _ZN7S1425C1D1Ev();
Name_Map name_map_S1425C1[] = {
  NSPAIR(_ZN7S1425C1C1Ev),
  NSPAIR(_ZN7S1425C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1425C4;
extern VTBL_ENTRY _ZTI7S1425C4[];
extern  VTBL_ENTRY _ZTV7S1425C4[];
extern Class_Descriptor cd_S1425C3;
extern VTBL_ENTRY _ZTI7S1425C3[];
extern  VTBL_ENTRY _ZTV7S1425C3[];
extern Class_Descriptor cd_S1425C2;
extern VTBL_ENTRY _ZTI7S1425C2[];
extern  VTBL_ENTRY _ZTV7S1425C2[];
static Base_Class bases_S1425C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1425C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1425C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1425C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1425C1[];
extern void _ZN7S1425C1D1Ev();
extern void _ZN7S1425C1D0Ev();
extern void _ZN7S1425C42v4Ev();
extern void _ZN7S1425C42v5Ev();
extern void _ZN7S1425C42v6Ev();
extern void _ZN7S1425C42v7Ev();
extern void _ZN7S1425C42v8Ev();
extern void _ZN7S1425C42v9Ev();
extern void _ZN7S1425C43v10Ev();
extern void _ZN7S1425C43v11Ev();
extern void _ZN7S1425C43v12Ev();
extern void _ZN7S1425C43v13Ev();
extern void _ZN7S1425C43v14Ev();
extern void _ZN7S1425C43v15Ev();
extern void _ZN7S1425C43v16Ev();
extern void _ZN7S1425C43v17Ev();
extern void _ZN7S1425C43v18Ev();
extern void _ZN7S1425C43v19Ev();
extern void _ZN7S1425C43v20Ev();
extern void _ZN7S1425C43v21Ev();
extern void _ZN7S1425C43v22Ev();
extern void _ZN7S1425C43v23Ev();
extern void _ZN7S1425C43v24Ev();
extern void _ZN7S1425C43v25Ev();
extern void _ZN7S1425C43v26Ev();
extern void _ZN7S1425C43v27Ev();
extern void _ZN7S1425C43v28Ev();
extern void _ZN7S1425C43v29Ev();
extern void _ZN7S1425C43v30Ev();
extern void _ZN7S1425C43v31Ev();
extern void _ZN7S1425C43v32Ev();
extern void _ZN7S1425C43v33Ev();
extern void _ZN7S1425C43v34Ev();
extern void _ZN7S1425C43v35Ev();
extern void _ZN7S1425C43v36Ev();
extern void _ZN7S1425C43v37Ev();
extern void _ZN7S1425C43v38Ev();
extern void _ZN7S1425C43v39Ev();
extern void _ZN7S1425C43v40Ev();
extern void _ZN7S1425C43v41Ev();
extern void _ZN7S1425C43v42Ev();
extern void _ZN7S1425C43v43Ev();
extern void _ZN7S1425C43v44Ev();
extern void _ZN7S1425C43v45Ev();
extern void _ZN7S1425C43v46Ev();
extern void _ZN7S1425C43v47Ev();
extern void _ZN7S1425C43v48Ev();
extern void _ZN7S1425C43v49Ev();
extern void _ZN7S1425C43v50Ev();
extern void _ZN7S1425C43v51Ev();
extern void _ZN7S1425C43v52Ev();
extern void _ZN7S1425C43v53Ev();
extern void _ZN7S1425C43v54Ev();
extern void _ZN7S1425C43v55Ev();
extern void _ZN7S1425C43v56Ev();
extern void _ZN7S1425C43v57Ev();
extern void _ZN7S1425C43v58Ev();
extern void _ZN7S1425C43v59Ev();
extern void _ZN7S1425C43v60Ev();
extern void _ZN7S1425C43v61Ev();
extern void _ZN7S1425C43v62Ev();
extern void _ZN7S1425C43v63Ev();
extern void _ZN7S1425C43v64Ev();
extern void _ZN7S1425C43v65Ev();
extern void _ZN7S1425C43v66Ev();
extern void _ZN7S1425C43v67Ev();
extern void _ZN7S1425C33v68Ev();
extern void _ZN7S1425C33v69Ev();
extern void _ZN7S1425C33v70Ev();
extern void _ZN7S1425C33v71Ev();
extern void _ZN7S1425C33v72Ev();
extern void _ZN7S1425C33v73Ev();
extern void _ZN7S1425C33v74Ev();
extern void _ZN7S1425C33v75Ev();
extern void _ZN7S1425C33v76Ev();
extern void _ZN7S1425C33v77Ev();
extern void _ZN7S1425C33v78Ev();
extern void _ZN7S1425C33v79Ev();
extern void _ZN7S1425C33v80Ev();
extern void _ZN7S1425C23v81Ev();
extern void _ZN7S1425C23v82Ev();
extern void _ZN7S1425C23v83Ev();
extern void _ZN7S1425C23v84Ev();
extern void _ZN7S1425C23v85Ev();
extern void _ZN7S1425C23v86Ev();
extern void _ZN7S1425C23v87Ev();
extern void _ZN7S1425C12v1Ev();
extern void _ZN7S1425C12v2Ev();
extern void _ZN7S1425C12v3Ev();
static  VTBL_ENTRY vtc_S1425C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1425C1[0]),
  (VTBL_ENTRY)&_ZN7S1425C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1425C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1425C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1425C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1425C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1425C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1425C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1425C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1425C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1425C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1425C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1425C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1425C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1425C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1425C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1425C1[];
extern  VTBL_ENTRY _ZTV7S1425C1[];
Class_Descriptor cd_S1425C1 = {  "S1425C1", // class name
  bases_S1425C1, 3,
  &(vtc_S1425C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(272,212), // object size
  NSPAIRA(_ZTI7S1425C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1425C1),91, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1430C4  {
  int s1430c4f0;
  __tsi64 s1430c4f1;
  void *s1430c4f2[4];
  int s1430c4f3[2];
  void *s1430c4f4;
  ::S3432C14_nt s1430c4f5;
  void *s1430c4f6[2];
  virtual  ~S1430C4(); // _ZN7S1430C4D1Ev
  virtual void  v4(); // _ZN7S1430C42v4Ev
  virtual void  v5(); // _ZN7S1430C42v5Ev
  virtual void  v6(); // _ZN7S1430C42v6Ev
  virtual void  v7(); // _ZN7S1430C42v7Ev
  virtual void  v8(); // _ZN7S1430C42v8Ev
  virtual void  v9(); // _ZN7S1430C42v9Ev
  virtual void  v10(); // _ZN7S1430C43v10Ev
  virtual void  v11(); // _ZN7S1430C43v11Ev
  virtual void  v12(); // _ZN7S1430C43v12Ev
  virtual void  v13(); // _ZN7S1430C43v13Ev
  virtual void  v14(); // _ZN7S1430C43v14Ev
  virtual void  v15(); // _ZN7S1430C43v15Ev
  virtual void  v16(); // _ZN7S1430C43v16Ev
  virtual void  v17(); // _ZN7S1430C43v17Ev
  virtual void  v18(); // _ZN7S1430C43v18Ev
  virtual void  v19(); // _ZN7S1430C43v19Ev
  virtual void  v20(); // _ZN7S1430C43v20Ev
  virtual void  v21(); // _ZN7S1430C43v21Ev
  virtual void  v22(); // _ZN7S1430C43v22Ev
  virtual void  v23(); // _ZN7S1430C43v23Ev
  virtual void  v24(); // _ZN7S1430C43v24Ev
  virtual void  v25(); // _ZN7S1430C43v25Ev
  virtual void  v26(); // _ZN7S1430C43v26Ev
  virtual void  v27(); // _ZN7S1430C43v27Ev
  virtual void  v28(); // _ZN7S1430C43v28Ev
  virtual void  v29(); // _ZN7S1430C43v29Ev
  virtual void  v30(); // _ZN7S1430C43v30Ev
  virtual void  v31(); // _ZN7S1430C43v31Ev
  virtual void  v32(); // _ZN7S1430C43v32Ev
  virtual void  v33(); // _ZN7S1430C43v33Ev
  virtual void  v34(); // _ZN7S1430C43v34Ev
  virtual void  v35(); // _ZN7S1430C43v35Ev
  virtual void  v36(); // _ZN7S1430C43v36Ev
  virtual void  v37(); // _ZN7S1430C43v37Ev
  virtual void  v38(); // _ZN7S1430C43v38Ev
  virtual void  v39(); // _ZN7S1430C43v39Ev
  virtual void  v40(); // _ZN7S1430C43v40Ev
  virtual void  v41(); // _ZN7S1430C43v41Ev
  virtual void  v42(); // _ZN7S1430C43v42Ev
  virtual void  v43(); // _ZN7S1430C43v43Ev
  virtual void  v44(); // _ZN7S1430C43v44Ev
  virtual void  v45(); // _ZN7S1430C43v45Ev
  virtual void  v46(); // _ZN7S1430C43v46Ev
  virtual void  v47(); // _ZN7S1430C43v47Ev
  virtual void  v48(); // _ZN7S1430C43v48Ev
  virtual void  v49(); // _ZN7S1430C43v49Ev
  virtual void  v50(); // _ZN7S1430C43v50Ev
  virtual void  v51(); // _ZN7S1430C43v51Ev
  virtual void  v52(); // _ZN7S1430C43v52Ev
  virtual void  v53(); // _ZN7S1430C43v53Ev
  virtual void  v54(); // _ZN7S1430C43v54Ev
  virtual void  v55(); // _ZN7S1430C43v55Ev
  virtual void  v56(); // _ZN7S1430C43v56Ev
  virtual void  v57(); // _ZN7S1430C43v57Ev
  virtual void  v58(); // _ZN7S1430C43v58Ev
  virtual void  v59(); // _ZN7S1430C43v59Ev
  virtual void  v60(); // _ZN7S1430C43v60Ev
  virtual void  v61(); // _ZN7S1430C43v61Ev
  virtual void  v62(); // _ZN7S1430C43v62Ev
  virtual void  v63(); // _ZN7S1430C43v63Ev
  virtual void  v64(); // _ZN7S1430C43v64Ev
  virtual void  v65(); // _ZN7S1430C43v65Ev
  virtual void  v66(); // _ZN7S1430C43v66Ev
  virtual void  v67(); // _ZN7S1430C43v67Ev
  S1430C4(); // tgen
};
//SIG(-1 S1430C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1430C4 ::~S1430C4(){ note_dtor("S1430C4", this);}
void  S1430C4 ::v4(){vfunc_called(this, "_ZN7S1430C42v4Ev");}
void  S1430C4 ::v5(){vfunc_called(this, "_ZN7S1430C42v5Ev");}
void  S1430C4 ::v6(){vfunc_called(this, "_ZN7S1430C42v6Ev");}
void  S1430C4 ::v7(){vfunc_called(this, "_ZN7S1430C42v7Ev");}
void  S1430C4 ::v8(){vfunc_called(this, "_ZN7S1430C42v8Ev");}
void  S1430C4 ::v9(){vfunc_called(this, "_ZN7S1430C42v9Ev");}
void  S1430C4 ::v10(){vfunc_called(this, "_ZN7S1430C43v10Ev");}
void  S1430C4 ::v11(){vfunc_called(this, "_ZN7S1430C43v11Ev");}
void  S1430C4 ::v12(){vfunc_called(this, "_ZN7S1430C43v12Ev");}
void  S1430C4 ::v13(){vfunc_called(this, "_ZN7S1430C43v13Ev");}
void  S1430C4 ::v14(){vfunc_called(this, "_ZN7S1430C43v14Ev");}
void  S1430C4 ::v15(){vfunc_called(this, "_ZN7S1430C43v15Ev");}
void  S1430C4 ::v16(){vfunc_called(this, "_ZN7S1430C43v16Ev");}
void  S1430C4 ::v17(){vfunc_called(this, "_ZN7S1430C43v17Ev");}
void  S1430C4 ::v18(){vfunc_called(this, "_ZN7S1430C43v18Ev");}
void  S1430C4 ::v19(){vfunc_called(this, "_ZN7S1430C43v19Ev");}
void  S1430C4 ::v20(){vfunc_called(this, "_ZN7S1430C43v20Ev");}
void  S1430C4 ::v21(){vfunc_called(this, "_ZN7S1430C43v21Ev");}
void  S1430C4 ::v22(){vfunc_called(this, "_ZN7S1430C43v22Ev");}
void  S1430C4 ::v23(){vfunc_called(this, "_ZN7S1430C43v23Ev");}
void  S1430C4 ::v24(){vfunc_called(this, "_ZN7S1430C43v24Ev");}
void  S1430C4 ::v25(){vfunc_called(this, "_ZN7S1430C43v25Ev");}
void  S1430C4 ::v26(){vfunc_called(this, "_ZN7S1430C43v26Ev");}
void  S1430C4 ::v27(){vfunc_called(this, "_ZN7S1430C43v27Ev");}
void  S1430C4 ::v28(){vfunc_called(this, "_ZN7S1430C43v28Ev");}
void  S1430C4 ::v29(){vfunc_called(this, "_ZN7S1430C43v29Ev");}
void  S1430C4 ::v30(){vfunc_called(this, "_ZN7S1430C43v30Ev");}
void  S1430C4 ::v31(){vfunc_called(this, "_ZN7S1430C43v31Ev");}
void  S1430C4 ::v32(){vfunc_called(this, "_ZN7S1430C43v32Ev");}
void  S1430C4 ::v33(){vfunc_called(this, "_ZN7S1430C43v33Ev");}
void  S1430C4 ::v34(){vfunc_called(this, "_ZN7S1430C43v34Ev");}
void  S1430C4 ::v35(){vfunc_called(this, "_ZN7S1430C43v35Ev");}
void  S1430C4 ::v36(){vfunc_called(this, "_ZN7S1430C43v36Ev");}
void  S1430C4 ::v37(){vfunc_called(this, "_ZN7S1430C43v37Ev");}
void  S1430C4 ::v38(){vfunc_called(this, "_ZN7S1430C43v38Ev");}
void  S1430C4 ::v39(){vfunc_called(this, "_ZN7S1430C43v39Ev");}
void  S1430C4 ::v40(){vfunc_called(this, "_ZN7S1430C43v40Ev");}
void  S1430C4 ::v41(){vfunc_called(this, "_ZN7S1430C43v41Ev");}
void  S1430C4 ::v42(){vfunc_called(this, "_ZN7S1430C43v42Ev");}
void  S1430C4 ::v43(){vfunc_called(this, "_ZN7S1430C43v43Ev");}
void  S1430C4 ::v44(){vfunc_called(this, "_ZN7S1430C43v44Ev");}
void  S1430C4 ::v45(){vfunc_called(this, "_ZN7S1430C43v45Ev");}
void  S1430C4 ::v46(){vfunc_called(this, "_ZN7S1430C43v46Ev");}
void  S1430C4 ::v47(){vfunc_called(this, "_ZN7S1430C43v47Ev");}
void  S1430C4 ::v48(){vfunc_called(this, "_ZN7S1430C43v48Ev");}
void  S1430C4 ::v49(){vfunc_called(this, "_ZN7S1430C43v49Ev");}
void  S1430C4 ::v50(){vfunc_called(this, "_ZN7S1430C43v50Ev");}
void  S1430C4 ::v51(){vfunc_called(this, "_ZN7S1430C43v51Ev");}
void  S1430C4 ::v52(){vfunc_called(this, "_ZN7S1430C43v52Ev");}
void  S1430C4 ::v53(){vfunc_called(this, "_ZN7S1430C43v53Ev");}
void  S1430C4 ::v54(){vfunc_called(this, "_ZN7S1430C43v54Ev");}
void  S1430C4 ::v55(){vfunc_called(this, "_ZN7S1430C43v55Ev");}
void  S1430C4 ::v56(){vfunc_called(this, "_ZN7S1430C43v56Ev");}
void  S1430C4 ::v57(){vfunc_called(this, "_ZN7S1430C43v57Ev");}
void  S1430C4 ::v58(){vfunc_called(this, "_ZN7S1430C43v58Ev");}
void  S1430C4 ::v59(){vfunc_called(this, "_ZN7S1430C43v59Ev");}
void  S1430C4 ::v60(){vfunc_called(this, "_ZN7S1430C43v60Ev");}
void  S1430C4 ::v61(){vfunc_called(this, "_ZN7S1430C43v61Ev");}
void  S1430C4 ::v62(){vfunc_called(this, "_ZN7S1430C43v62Ev");}
void  S1430C4 ::v63(){vfunc_called(this, "_ZN7S1430C43v63Ev");}
void  S1430C4 ::v64(){vfunc_called(this, "_ZN7S1430C43v64Ev");}
void  S1430C4 ::v65(){vfunc_called(this, "_ZN7S1430C43v65Ev");}
void  S1430C4 ::v66(){vfunc_called(this, "_ZN7S1430C43v66Ev");}
void  S1430C4 ::v67(){vfunc_called(this, "_ZN7S1430C43v67Ev");}
S1430C4 ::S1430C4(){ note_ctor("S1430C4", this);} // tgen

static void Test_S1430C4()
{
  extern Class_Descriptor cd_S1430C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1430C4, buf);
    S1430C4 *dp, &lv = *(dp=new (buf) S1430C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1430C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1430C4)");
    check_field_offset(lv, s1430c4f0, ABISELECT(8,4), "S1430C4.s1430c4f0");
    check_field_offset(lv, s1430c4f1, ABISELECT(16,8), "S1430C4.s1430c4f1");
    check_field_offset(lv, s1430c4f2, ABISELECT(24,16), "S1430C4.s1430c4f2");
    check_field_offset(lv, s1430c4f3, ABISELECT(56,32), "S1430C4.s1430c4f3");
    check_field_offset(lv, s1430c4f4, ABISELECT(64,40), "S1430C4.s1430c4f4");
    check_field_offset(lv, s1430c4f5, ABISELECT(72,44), "S1430C4.s1430c4f5");
    check_field_offset(lv, s1430c4f6, ABISELECT(80,52), "S1430C4.s1430c4f6");
    test_class_info(&lv, &cd_S1430C4);
    dp->~S1430C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1430C4(Test_S1430C4, "S1430C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1430C4C1Ev();
extern void _ZN7S1430C4D1Ev();
Name_Map name_map_S1430C4[] = {
  NSPAIR(_ZN7S1430C4C1Ev),
  NSPAIR(_ZN7S1430C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1430C4[];
extern void _ZN7S1430C4D1Ev();
extern void _ZN7S1430C4D0Ev();
extern void _ZN7S1430C42v4Ev();
extern void _ZN7S1430C42v5Ev();
extern void _ZN7S1430C42v6Ev();
extern void _ZN7S1430C42v7Ev();
extern void _ZN7S1430C42v8Ev();
extern void _ZN7S1430C42v9Ev();
extern void _ZN7S1430C43v10Ev();
extern void _ZN7S1430C43v11Ev();
extern void _ZN7S1430C43v12Ev();
extern void _ZN7S1430C43v13Ev();
extern void _ZN7S1430C43v14Ev();
extern void _ZN7S1430C43v15Ev();
extern void _ZN7S1430C43v16Ev();
extern void _ZN7S1430C43v17Ev();
extern void _ZN7S1430C43v18Ev();
extern void _ZN7S1430C43v19Ev();
extern void _ZN7S1430C43v20Ev();
extern void _ZN7S1430C43v21Ev();
extern void _ZN7S1430C43v22Ev();
extern void _ZN7S1430C43v23Ev();
extern void _ZN7S1430C43v24Ev();
extern void _ZN7S1430C43v25Ev();
extern void _ZN7S1430C43v26Ev();
extern void _ZN7S1430C43v27Ev();
extern void _ZN7S1430C43v28Ev();
extern void _ZN7S1430C43v29Ev();
extern void _ZN7S1430C43v30Ev();
extern void _ZN7S1430C43v31Ev();
extern void _ZN7S1430C43v32Ev();
extern void _ZN7S1430C43v33Ev();
extern void _ZN7S1430C43v34Ev();
extern void _ZN7S1430C43v35Ev();
extern void _ZN7S1430C43v36Ev();
extern void _ZN7S1430C43v37Ev();
extern void _ZN7S1430C43v38Ev();
extern void _ZN7S1430C43v39Ev();
extern void _ZN7S1430C43v40Ev();
extern void _ZN7S1430C43v41Ev();
extern void _ZN7S1430C43v42Ev();
extern void _ZN7S1430C43v43Ev();
extern void _ZN7S1430C43v44Ev();
extern void _ZN7S1430C43v45Ev();
extern void _ZN7S1430C43v46Ev();
extern void _ZN7S1430C43v47Ev();
extern void _ZN7S1430C43v48Ev();
extern void _ZN7S1430C43v49Ev();
extern void _ZN7S1430C43v50Ev();
extern void _ZN7S1430C43v51Ev();
extern void _ZN7S1430C43v52Ev();
extern void _ZN7S1430C43v53Ev();
extern void _ZN7S1430C43v54Ev();
extern void _ZN7S1430C43v55Ev();
extern void _ZN7S1430C43v56Ev();
extern void _ZN7S1430C43v57Ev();
extern void _ZN7S1430C43v58Ev();
extern void _ZN7S1430C43v59Ev();
extern void _ZN7S1430C43v60Ev();
extern void _ZN7S1430C43v61Ev();
extern void _ZN7S1430C43v62Ev();
extern void _ZN7S1430C43v63Ev();
extern void _ZN7S1430C43v64Ev();
extern void _ZN7S1430C43v65Ev();
extern void _ZN7S1430C43v66Ev();
extern void _ZN7S1430C43v67Ev();
static  VTBL_ENTRY vtc_S1430C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1430C4[0]),
  (VTBL_ENTRY)&_ZN7S1430C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1430C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v67Ev,
};
extern VTBL_ENTRY _ZTI7S1430C4[];
extern  VTBL_ENTRY _ZTV7S1430C4[];
Class_Descriptor cd_S1430C4 = {  "S1430C4", // class name
  0,0,//no base classes
  &(vtc_S1430C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1430C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1430C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1430C3  : S1430C4 {
  void *s1430c3f0;
  ::S3432C14_nt s1430c3f1;
  int s1430c3f2[5];
  unsigned int s1430c3f3:1;
  unsigned int s1430c3f4:1;
  unsigned int s1430c3f5:1;
  unsigned int s1430c3f6:1;
  unsigned int s1430c3f7:1;
  ::S273C21 s1430c3f8;
  ::S273C17 s1430c3f9;
  unsigned int s1430c3f10:1;
  int s1430c3f11[2];
  void *s1430c3f12;
  int s1430c3f13[3];
  virtual  ~S1430C3(); // _ZN7S1430C3D1Ev
  virtual void  v68(); // _ZN7S1430C33v68Ev
  virtual void  v69(); // _ZN7S1430C33v69Ev
  virtual void  v70(); // _ZN7S1430C33v70Ev
  virtual void  v71(); // _ZN7S1430C33v71Ev
  virtual void  v72(); // _ZN7S1430C33v72Ev
  virtual void  v73(); // _ZN7S1430C33v73Ev
  virtual void  v74(); // _ZN7S1430C33v74Ev
  virtual void  v75(); // _ZN7S1430C33v75Ev
  virtual void  v76(); // _ZN7S1430C33v76Ev
  virtual void  v77(); // _ZN7S1430C33v77Ev
  virtual void  v78(); // _ZN7S1430C33v78Ev
  virtual void  v79(); // _ZN7S1430C33v79Ev
  virtual void  v80(); // _ZN7S1430C33v80Ev
  S1430C3(); // tgen
};
//SIG(-1 S1430C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1430C3 ::~S1430C3(){ note_dtor("S1430C3", this);}
void  S1430C3 ::v68(){vfunc_called(this, "_ZN7S1430C33v68Ev");}
void  S1430C3 ::v69(){vfunc_called(this, "_ZN7S1430C33v69Ev");}
void  S1430C3 ::v70(){vfunc_called(this, "_ZN7S1430C33v70Ev");}
void  S1430C3 ::v71(){vfunc_called(this, "_ZN7S1430C33v71Ev");}
void  S1430C3 ::v72(){vfunc_called(this, "_ZN7S1430C33v72Ev");}
void  S1430C3 ::v73(){vfunc_called(this, "_ZN7S1430C33v73Ev");}
void  S1430C3 ::v74(){vfunc_called(this, "_ZN7S1430C33v74Ev");}
void  S1430C3 ::v75(){vfunc_called(this, "_ZN7S1430C33v75Ev");}
void  S1430C3 ::v76(){vfunc_called(this, "_ZN7S1430C33v76Ev");}
void  S1430C3 ::v77(){vfunc_called(this, "_ZN7S1430C33v77Ev");}
void  S1430C3 ::v78(){vfunc_called(this, "_ZN7S1430C33v78Ev");}
void  S1430C3 ::v79(){vfunc_called(this, "_ZN7S1430C33v79Ev");}
void  S1430C3 ::v80(){vfunc_called(this, "_ZN7S1430C33v80Ev");}
S1430C3 ::S1430C3(){ note_ctor("S1430C3", this);} // tgen

static void Test_S1430C3()
{
  extern Class_Descriptor cd_S1430C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1430C3, buf);
    S1430C3 *dp, &lv = *(dp=new (buf) S1430C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1430C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1430C3)");
    check_base_class_offset(lv, (S1430C4*), 0, "S1430C3");
    check_field_offset(lv, s1430c3f0, ABISELECT(96,60), "S1430C3.s1430c3f0");
    check_field_offset(lv, s1430c3f1, ABISELECT(104,64), "S1430C3.s1430c3f1");
    check_field_offset(lv, s1430c3f2, ABISELECT(112,72), "S1430C3.s1430c3f2");
    set_bf_and_test(lv, s1430c3f3, ABISELECT(132,92), 0, 1, 1, "S1430C3");
    set_bf_and_test(lv, s1430c3f4, ABISELECT(132,92), 1, 1, 1, "S1430C3");
    set_bf_and_test(lv, s1430c3f5, ABISELECT(132,92), 2, 1, 1, "S1430C3");
    set_bf_and_test(lv, s1430c3f6, ABISELECT(132,92), 3, 1, 1, "S1430C3");
    set_bf_and_test(lv, s1430c3f7, ABISELECT(132,92), 4, 1, 1, "S1430C3");
    check_field_offset(lv, s1430c3f8, ABISELECT(136,96), "S1430C3.s1430c3f8");
    check_field_offset(lv, s1430c3f9, ABISELECT(152,108), "S1430C3.s1430c3f9");
    set_bf_and_test(lv, s1430c3f10, ABISELECT(168,120), 0, 1, 1, "S1430C3");
    check_field_offset(lv, s1430c3f11, ABISELECT(172,124), "S1430C3.s1430c3f11");
    check_field_offset(lv, s1430c3f12, ABISELECT(184,132), "S1430C3.s1430c3f12");
    check_field_offset(lv, s1430c3f13, ABISELECT(192,136), "S1430C3.s1430c3f13");
    test_class_info(&lv, &cd_S1430C3);
    dp->~S1430C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1430C3(Test_S1430C3, "S1430C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1430C3C1Ev();
extern void _ZN7S1430C3D1Ev();
Name_Map name_map_S1430C3[] = {
  NSPAIR(_ZN7S1430C3C1Ev),
  NSPAIR(_ZN7S1430C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1430C4;
extern VTBL_ENTRY _ZTI7S1430C4[];
extern  VTBL_ENTRY _ZTV7S1430C4[];
static Base_Class bases_S1430C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1430C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1430C3[];
extern void _ZN7S1430C3D1Ev();
extern void _ZN7S1430C3D0Ev();
extern void _ZN7S1430C42v4Ev();
extern void _ZN7S1430C42v5Ev();
extern void _ZN7S1430C42v6Ev();
extern void _ZN7S1430C42v7Ev();
extern void _ZN7S1430C42v8Ev();
extern void _ZN7S1430C42v9Ev();
extern void _ZN7S1430C43v10Ev();
extern void _ZN7S1430C43v11Ev();
extern void _ZN7S1430C43v12Ev();
extern void _ZN7S1430C43v13Ev();
extern void _ZN7S1430C43v14Ev();
extern void _ZN7S1430C43v15Ev();
extern void _ZN7S1430C43v16Ev();
extern void _ZN7S1430C43v17Ev();
extern void _ZN7S1430C43v18Ev();
extern void _ZN7S1430C43v19Ev();
extern void _ZN7S1430C43v20Ev();
extern void _ZN7S1430C43v21Ev();
extern void _ZN7S1430C43v22Ev();
extern void _ZN7S1430C43v23Ev();
extern void _ZN7S1430C43v24Ev();
extern void _ZN7S1430C43v25Ev();
extern void _ZN7S1430C43v26Ev();
extern void _ZN7S1430C43v27Ev();
extern void _ZN7S1430C43v28Ev();
extern void _ZN7S1430C43v29Ev();
extern void _ZN7S1430C43v30Ev();
extern void _ZN7S1430C43v31Ev();
extern void _ZN7S1430C43v32Ev();
extern void _ZN7S1430C43v33Ev();
extern void _ZN7S1430C43v34Ev();
extern void _ZN7S1430C43v35Ev();
extern void _ZN7S1430C43v36Ev();
extern void _ZN7S1430C43v37Ev();
extern void _ZN7S1430C43v38Ev();
extern void _ZN7S1430C43v39Ev();
extern void _ZN7S1430C43v40Ev();
extern void _ZN7S1430C43v41Ev();
extern void _ZN7S1430C43v42Ev();
extern void _ZN7S1430C43v43Ev();
extern void _ZN7S1430C43v44Ev();
extern void _ZN7S1430C43v45Ev();
extern void _ZN7S1430C43v46Ev();
extern void _ZN7S1430C43v47Ev();
extern void _ZN7S1430C43v48Ev();
extern void _ZN7S1430C43v49Ev();
extern void _ZN7S1430C43v50Ev();
extern void _ZN7S1430C43v51Ev();
extern void _ZN7S1430C43v52Ev();
extern void _ZN7S1430C43v53Ev();
extern void _ZN7S1430C43v54Ev();
extern void _ZN7S1430C43v55Ev();
extern void _ZN7S1430C43v56Ev();
extern void _ZN7S1430C43v57Ev();
extern void _ZN7S1430C43v58Ev();
extern void _ZN7S1430C43v59Ev();
extern void _ZN7S1430C43v60Ev();
extern void _ZN7S1430C43v61Ev();
extern void _ZN7S1430C43v62Ev();
extern void _ZN7S1430C43v63Ev();
extern void _ZN7S1430C43v64Ev();
extern void _ZN7S1430C43v65Ev();
extern void _ZN7S1430C43v66Ev();
extern void _ZN7S1430C43v67Ev();
extern void _ZN7S1430C33v68Ev();
extern void _ZN7S1430C33v69Ev();
extern void _ZN7S1430C33v70Ev();
extern void _ZN7S1430C33v71Ev();
extern void _ZN7S1430C33v72Ev();
extern void _ZN7S1430C33v73Ev();
extern void _ZN7S1430C33v74Ev();
extern void _ZN7S1430C33v75Ev();
extern void _ZN7S1430C33v76Ev();
extern void _ZN7S1430C33v77Ev();
extern void _ZN7S1430C33v78Ev();
extern void _ZN7S1430C33v79Ev();
extern void _ZN7S1430C33v80Ev();
static  VTBL_ENTRY vtc_S1430C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1430C3[0]),
  (VTBL_ENTRY)&_ZN7S1430C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1430C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S1430C3[];
extern  VTBL_ENTRY _ZTV7S1430C3[];
Class_Descriptor cd_S1430C3 = {  "S1430C3", // class name
  bases_S1430C3, 1,
  &(vtc_S1430C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1430C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1430C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1430C2  : S1430C3 {
  unsigned int s1430c2f0:1;
  unsigned int s1430c2f1:1;
  unsigned int s1430c2f2:1;
  unsigned int s1430c2f3:1;
  ::S664C12_nt s1430c2f4;
  char s1430c2f5[2];
  ::S3432C14_nt s1430c2f6;
  ::S632C13 s1430c2f7;
  ::S3432C14_nt s1430c2f8;
  virtual  ~S1430C2(); // _ZN7S1430C2D1Ev
  virtual void  v81(); // _ZN7S1430C23v81Ev
  virtual void  v82(); // _ZN7S1430C23v82Ev
  virtual void  v83(); // _ZN7S1430C23v83Ev
  virtual void  v84(); // _ZN7S1430C23v84Ev
  virtual void  v85(); // _ZN7S1430C23v85Ev
  virtual void  v86(); // _ZN7S1430C23v86Ev
  virtual void  v87(); // _ZN7S1430C23v87Ev
  S1430C2(); // tgen
};
//SIG(-1 S1430C2) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S1430C2 ::~S1430C2(){ note_dtor("S1430C2", this);}
void  S1430C2 ::v81(){vfunc_called(this, "_ZN7S1430C23v81Ev");}
void  S1430C2 ::v82(){vfunc_called(this, "_ZN7S1430C23v82Ev");}
void  S1430C2 ::v83(){vfunc_called(this, "_ZN7S1430C23v83Ev");}
void  S1430C2 ::v84(){vfunc_called(this, "_ZN7S1430C23v84Ev");}
void  S1430C2 ::v85(){vfunc_called(this, "_ZN7S1430C23v85Ev");}
void  S1430C2 ::v86(){vfunc_called(this, "_ZN7S1430C23v86Ev");}
void  S1430C2 ::v87(){vfunc_called(this, "_ZN7S1430C23v87Ev");}
S1430C2 ::S1430C2(){ note_ctor("S1430C2", this);} // tgen

static void Test_S1430C2()
{
  extern Class_Descriptor cd_S1430C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1430C2, buf);
    S1430C2 *dp, &lv = *(dp=new (buf) S1430C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1430C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1430C2)");
    check_base_class_offset(lv, (S1430C4*)(S1430C3*), 0, "S1430C2");
    check_base_class_offset(lv, (S1430C3*), 0, "S1430C2");
    set_bf_and_test(lv, s1430c2f0, ABISELECT(204,148), 0, 1, 1, "S1430C2");
    set_bf_and_test(lv, s1430c2f1, ABISELECT(204,148), 1, 1, 1, "S1430C2");
    set_bf_and_test(lv, s1430c2f2, ABISELECT(204,148), 2, 1, 1, "S1430C2");
    set_bf_and_test(lv, s1430c2f3, ABISELECT(204,148), 3, 1, 1, "S1430C2");
    check_field_offset(lv, s1430c2f4, ABISELECT(208,152), "S1430C2.s1430c2f4");
    check_field_offset(lv, s1430c2f5, ABISELECT(220,164), "S1430C2.s1430c2f5");
    check_field_offset(lv, s1430c2f6, ABISELECT(224,168), "S1430C2.s1430c2f6");
    check_field_offset(lv, s1430c2f7, ABISELECT(232,176), "S1430C2.s1430c2f7");
    check_field_offset(lv, s1430c2f8, ABISELECT(244,188), "S1430C2.s1430c2f8");
    test_class_info(&lv, &cd_S1430C2);
    dp->~S1430C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1430C2(Test_S1430C2, "S1430C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1430C2C1Ev();
extern void _ZN7S1430C2D1Ev();
Name_Map name_map_S1430C2[] = {
  NSPAIR(_ZN7S1430C2C1Ev),
  NSPAIR(_ZN7S1430C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1430C4;
extern VTBL_ENTRY _ZTI7S1430C4[];
extern  VTBL_ENTRY _ZTV7S1430C4[];
extern Class_Descriptor cd_S1430C3;
extern VTBL_ENTRY _ZTI7S1430C3[];
extern  VTBL_ENTRY _ZTV7S1430C3[];
static Base_Class bases_S1430C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1430C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1430C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1430C2[];
extern void _ZN7S1430C2D1Ev();
extern void _ZN7S1430C2D0Ev();
extern void _ZN7S1430C42v4Ev();
extern void _ZN7S1430C42v5Ev();
extern void _ZN7S1430C42v6Ev();
extern void _ZN7S1430C42v7Ev();
extern void _ZN7S1430C42v8Ev();
extern void _ZN7S1430C42v9Ev();
extern void _ZN7S1430C43v10Ev();
extern void _ZN7S1430C43v11Ev();
extern void _ZN7S1430C43v12Ev();
extern void _ZN7S1430C43v13Ev();
extern void _ZN7S1430C43v14Ev();
extern void _ZN7S1430C43v15Ev();
extern void _ZN7S1430C43v16Ev();
extern void _ZN7S1430C43v17Ev();
extern void _ZN7S1430C43v18Ev();
extern void _ZN7S1430C43v19Ev();
extern void _ZN7S1430C43v20Ev();
extern void _ZN7S1430C43v21Ev();
extern void _ZN7S1430C43v22Ev();
extern void _ZN7S1430C43v23Ev();
extern void _ZN7S1430C43v24Ev();
extern void _ZN7S1430C43v25Ev();
extern void _ZN7S1430C43v26Ev();
extern void _ZN7S1430C43v27Ev();
extern void _ZN7S1430C43v28Ev();
extern void _ZN7S1430C43v29Ev();
extern void _ZN7S1430C43v30Ev();
extern void _ZN7S1430C43v31Ev();
extern void _ZN7S1430C43v32Ev();
extern void _ZN7S1430C43v33Ev();
extern void _ZN7S1430C43v34Ev();
extern void _ZN7S1430C43v35Ev();
extern void _ZN7S1430C43v36Ev();
extern void _ZN7S1430C43v37Ev();
extern void _ZN7S1430C43v38Ev();
extern void _ZN7S1430C43v39Ev();
extern void _ZN7S1430C43v40Ev();
extern void _ZN7S1430C43v41Ev();
extern void _ZN7S1430C43v42Ev();
extern void _ZN7S1430C43v43Ev();
extern void _ZN7S1430C43v44Ev();
extern void _ZN7S1430C43v45Ev();
extern void _ZN7S1430C43v46Ev();
extern void _ZN7S1430C43v47Ev();
extern void _ZN7S1430C43v48Ev();
extern void _ZN7S1430C43v49Ev();
extern void _ZN7S1430C43v50Ev();
extern void _ZN7S1430C43v51Ev();
extern void _ZN7S1430C43v52Ev();
extern void _ZN7S1430C43v53Ev();
extern void _ZN7S1430C43v54Ev();
extern void _ZN7S1430C43v55Ev();
extern void _ZN7S1430C43v56Ev();
extern void _ZN7S1430C43v57Ev();
extern void _ZN7S1430C43v58Ev();
extern void _ZN7S1430C43v59Ev();
extern void _ZN7S1430C43v60Ev();
extern void _ZN7S1430C43v61Ev();
extern void _ZN7S1430C43v62Ev();
extern void _ZN7S1430C43v63Ev();
extern void _ZN7S1430C43v64Ev();
extern void _ZN7S1430C43v65Ev();
extern void _ZN7S1430C43v66Ev();
extern void _ZN7S1430C43v67Ev();
extern void _ZN7S1430C33v68Ev();
extern void _ZN7S1430C33v69Ev();
extern void _ZN7S1430C33v70Ev();
extern void _ZN7S1430C33v71Ev();
extern void _ZN7S1430C33v72Ev();
extern void _ZN7S1430C33v73Ev();
extern void _ZN7S1430C33v74Ev();
extern void _ZN7S1430C33v75Ev();
extern void _ZN7S1430C33v76Ev();
extern void _ZN7S1430C33v77Ev();
extern void _ZN7S1430C33v78Ev();
extern void _ZN7S1430C33v79Ev();
extern void _ZN7S1430C33v80Ev();
extern void _ZN7S1430C23v81Ev();
extern void _ZN7S1430C23v82Ev();
extern void _ZN7S1430C23v83Ev();
extern void _ZN7S1430C23v84Ev();
extern void _ZN7S1430C23v85Ev();
extern void _ZN7S1430C23v86Ev();
extern void _ZN7S1430C23v87Ev();
static  VTBL_ENTRY vtc_S1430C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1430C2[0]),
  (VTBL_ENTRY)&_ZN7S1430C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1430C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1430C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1430C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1430C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1430C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1430C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1430C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1430C23v87Ev,
};
extern VTBL_ENTRY _ZTI7S1430C2[];
extern  VTBL_ENTRY _ZTV7S1430C2[];
Class_Descriptor cd_S1430C2 = {  "S1430C2", // class name
  bases_S1430C2, 2,
  &(vtc_S1430C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1430C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1430C2),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1430C1  : S1430C2 {
  int s1430c1f0[3];
  virtual  ~S1430C1(); // _ZN7S1430C1D1Ev
  virtual void  v1(); // _ZN7S1430C12v1Ev
  virtual void  v2(); // _ZN7S1430C12v2Ev
  virtual void  v3(); // _ZN7S1430C12v3Ev
  S1430C1(); // tgen
};
//SIG(1 S1430C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 Fi[3]}


 S1430C1 ::~S1430C1(){ note_dtor("S1430C1", this);}
void  S1430C1 ::v1(){vfunc_called(this, "_ZN7S1430C12v1Ev");}
void  S1430C1 ::v2(){vfunc_called(this, "_ZN7S1430C12v2Ev");}
void  S1430C1 ::v3(){vfunc_called(this, "_ZN7S1430C12v3Ev");}
S1430C1 ::S1430C1(){ note_ctor("S1430C1", this);} // tgen

static void Test_S1430C1()
{
  extern Class_Descriptor cd_S1430C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(34,53)];
    init_test(&cd_S1430C1, buf);
    S1430C1 *dp, &lv = *(dp=new (buf) S1430C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(264,208), "sizeof(S1430C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1430C1)");
    check_base_class_offset(lv, (S1430C4*)(S1430C3*)(S1430C2*), 0, "S1430C1");
    check_base_class_offset(lv, (S1430C3*)(S1430C2*), 0, "S1430C1");
    check_base_class_offset(lv, (S1430C2*), 0, "S1430C1");
    check_field_offset(lv, s1430c1f0, ABISELECT(252,196), "S1430C1.s1430c1f0");
    test_class_info(&lv, &cd_S1430C1);
    dp->~S1430C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1430C1(Test_S1430C1, "S1430C1", ABISELECT(264,208));

#else // __cplusplus

extern void _ZN7S1430C1C1Ev();
extern void _ZN7S1430C1D1Ev();
Name_Map name_map_S1430C1[] = {
  NSPAIR(_ZN7S1430C1C1Ev),
  NSPAIR(_ZN7S1430C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1430C4;
extern VTBL_ENTRY _ZTI7S1430C4[];
extern  VTBL_ENTRY _ZTV7S1430C4[];
extern Class_Descriptor cd_S1430C3;
extern VTBL_ENTRY _ZTI7S1430C3[];
extern  VTBL_ENTRY _ZTV7S1430C3[];
extern Class_Descriptor cd_S1430C2;
extern VTBL_ENTRY _ZTI7S1430C2[];
extern  VTBL_ENTRY _ZTV7S1430C2[];
static Base_Class bases_S1430C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1430C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1430C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1430C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1430C1[];
extern void _ZN7S1430C1D1Ev();
extern void _ZN7S1430C1D0Ev();
extern void _ZN7S1430C42v4Ev();
extern void _ZN7S1430C42v5Ev();
extern void _ZN7S1430C42v6Ev();
extern void _ZN7S1430C42v7Ev();
extern void _ZN7S1430C42v8Ev();
extern void _ZN7S1430C42v9Ev();
extern void _ZN7S1430C43v10Ev();
extern void _ZN7S1430C43v11Ev();
extern void _ZN7S1430C43v12Ev();
extern void _ZN7S1430C43v13Ev();
extern void _ZN7S1430C43v14Ev();
extern void _ZN7S1430C43v15Ev();
extern void _ZN7S1430C43v16Ev();
extern void _ZN7S1430C43v17Ev();
extern void _ZN7S1430C43v18Ev();
extern void _ZN7S1430C43v19Ev();
extern void _ZN7S1430C43v20Ev();
extern void _ZN7S1430C43v21Ev();
extern void _ZN7S1430C43v22Ev();
extern void _ZN7S1430C43v23Ev();
extern void _ZN7S1430C43v24Ev();
extern void _ZN7S1430C43v25Ev();
extern void _ZN7S1430C43v26Ev();
extern void _ZN7S1430C43v27Ev();
extern void _ZN7S1430C43v28Ev();
extern void _ZN7S1430C43v29Ev();
extern void _ZN7S1430C43v30Ev();
extern void _ZN7S1430C43v31Ev();
extern void _ZN7S1430C43v32Ev();
extern void _ZN7S1430C43v33Ev();
extern void _ZN7S1430C43v34Ev();
extern void _ZN7S1430C43v35Ev();
extern void _ZN7S1430C43v36Ev();
extern void _ZN7S1430C43v37Ev();
extern void _ZN7S1430C43v38Ev();
extern void _ZN7S1430C43v39Ev();
extern void _ZN7S1430C43v40Ev();
extern void _ZN7S1430C43v41Ev();
extern void _ZN7S1430C43v42Ev();
extern void _ZN7S1430C43v43Ev();
extern void _ZN7S1430C43v44Ev();
extern void _ZN7S1430C43v45Ev();
extern void _ZN7S1430C43v46Ev();
extern void _ZN7S1430C43v47Ev();
extern void _ZN7S1430C43v48Ev();
extern void _ZN7S1430C43v49Ev();
extern void _ZN7S1430C43v50Ev();
extern void _ZN7S1430C43v51Ev();
extern void _ZN7S1430C43v52Ev();
extern void _ZN7S1430C43v53Ev();
extern void _ZN7S1430C43v54Ev();
extern void _ZN7S1430C43v55Ev();
extern void _ZN7S1430C43v56Ev();
extern void _ZN7S1430C43v57Ev();
extern void _ZN7S1430C43v58Ev();
extern void _ZN7S1430C43v59Ev();
extern void _ZN7S1430C43v60Ev();
extern void _ZN7S1430C43v61Ev();
extern void _ZN7S1430C43v62Ev();
extern void _ZN7S1430C43v63Ev();
extern void _ZN7S1430C43v64Ev();
extern void _ZN7S1430C43v65Ev();
extern void _ZN7S1430C43v66Ev();
extern void _ZN7S1430C43v67Ev();
extern void _ZN7S1430C33v68Ev();
extern void _ZN7S1430C33v69Ev();
extern void _ZN7S1430C33v70Ev();
extern void _ZN7S1430C33v71Ev();
extern void _ZN7S1430C33v72Ev();
extern void _ZN7S1430C33v73Ev();
extern void _ZN7S1430C33v74Ev();
extern void _ZN7S1430C33v75Ev();
extern void _ZN7S1430C33v76Ev();
extern void _ZN7S1430C33v77Ev();
extern void _ZN7S1430C33v78Ev();
extern void _ZN7S1430C33v79Ev();
extern void _ZN7S1430C33v80Ev();
extern void _ZN7S1430C23v81Ev();
extern void _ZN7S1430C23v82Ev();
extern void _ZN7S1430C23v83Ev();
extern void _ZN7S1430C23v84Ev();
extern void _ZN7S1430C23v85Ev();
extern void _ZN7S1430C23v86Ev();
extern void _ZN7S1430C23v87Ev();
extern void _ZN7S1430C12v1Ev();
extern void _ZN7S1430C12v2Ev();
extern void _ZN7S1430C12v3Ev();
static  VTBL_ENTRY vtc_S1430C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1430C1[0]),
  (VTBL_ENTRY)&_ZN7S1430C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1430C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1430C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1430C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1430C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1430C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1430C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1430C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1430C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1430C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1430C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1430C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1430C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1430C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1430C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1430C1[];
extern  VTBL_ENTRY _ZTV7S1430C1[];
Class_Descriptor cd_S1430C1 = {  "S1430C1", // class name
  bases_S1430C1, 3,
  &(vtc_S1430C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(264,208), // object size
  NSPAIRA(_ZTI7S1430C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1430C1),91, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1433C4  {
  int s1433c4f0;
  __tsi64 s1433c4f1;
  void *s1433c4f2[4];
  int s1433c4f3[2];
  void *s1433c4f4;
  ::S3432C14_nt s1433c4f5;
  void *s1433c4f6[2];
  virtual  ~S1433C4(); // _ZN7S1433C4D1Ev
  virtual void  v4(); // _ZN7S1433C42v4Ev
  virtual void  v5(); // _ZN7S1433C42v5Ev
  virtual void  v6(); // _ZN7S1433C42v6Ev
  virtual void  v7(); // _ZN7S1433C42v7Ev
  virtual void  v8(); // _ZN7S1433C42v8Ev
  virtual void  v9(); // _ZN7S1433C42v9Ev
  virtual void  v10(); // _ZN7S1433C43v10Ev
  virtual void  v11(); // _ZN7S1433C43v11Ev
  virtual void  v12(); // _ZN7S1433C43v12Ev
  virtual void  v13(); // _ZN7S1433C43v13Ev
  virtual void  v14(); // _ZN7S1433C43v14Ev
  virtual void  v15(); // _ZN7S1433C43v15Ev
  virtual void  v16(); // _ZN7S1433C43v16Ev
  virtual void  v17(); // _ZN7S1433C43v17Ev
  virtual void  v18(); // _ZN7S1433C43v18Ev
  virtual void  v19(); // _ZN7S1433C43v19Ev
  virtual void  v20(); // _ZN7S1433C43v20Ev
  virtual void  v21(); // _ZN7S1433C43v21Ev
  virtual void  v22(); // _ZN7S1433C43v22Ev
  virtual void  v23(); // _ZN7S1433C43v23Ev
  virtual void  v24(); // _ZN7S1433C43v24Ev
  virtual void  v25(); // _ZN7S1433C43v25Ev
  virtual void  v26(); // _ZN7S1433C43v26Ev
  virtual void  v27(); // _ZN7S1433C43v27Ev
  virtual void  v28(); // _ZN7S1433C43v28Ev
  virtual void  v29(); // _ZN7S1433C43v29Ev
  virtual void  v30(); // _ZN7S1433C43v30Ev
  virtual void  v31(); // _ZN7S1433C43v31Ev
  virtual void  v32(); // _ZN7S1433C43v32Ev
  virtual void  v33(); // _ZN7S1433C43v33Ev
  virtual void  v34(); // _ZN7S1433C43v34Ev
  virtual void  v35(); // _ZN7S1433C43v35Ev
  virtual void  v36(); // _ZN7S1433C43v36Ev
  virtual void  v37(); // _ZN7S1433C43v37Ev
  virtual void  v38(); // _ZN7S1433C43v38Ev
  virtual void  v39(); // _ZN7S1433C43v39Ev
  virtual void  v40(); // _ZN7S1433C43v40Ev
  virtual void  v41(); // _ZN7S1433C43v41Ev
  virtual void  v42(); // _ZN7S1433C43v42Ev
  virtual void  v43(); // _ZN7S1433C43v43Ev
  virtual void  v44(); // _ZN7S1433C43v44Ev
  virtual void  v45(); // _ZN7S1433C43v45Ev
  virtual void  v46(); // _ZN7S1433C43v46Ev
  virtual void  v47(); // _ZN7S1433C43v47Ev
  virtual void  v48(); // _ZN7S1433C43v48Ev
  virtual void  v49(); // _ZN7S1433C43v49Ev
  virtual void  v50(); // _ZN7S1433C43v50Ev
  virtual void  v51(); // _ZN7S1433C43v51Ev
  virtual void  v52(); // _ZN7S1433C43v52Ev
  virtual void  v53(); // _ZN7S1433C43v53Ev
  virtual void  v54(); // _ZN7S1433C43v54Ev
  virtual void  v55(); // _ZN7S1433C43v55Ev
  virtual void  v56(); // _ZN7S1433C43v56Ev
  virtual void  v57(); // _ZN7S1433C43v57Ev
  virtual void  v58(); // _ZN7S1433C43v58Ev
  virtual void  v59(); // _ZN7S1433C43v59Ev
  virtual void  v60(); // _ZN7S1433C43v60Ev
  virtual void  v61(); // _ZN7S1433C43v61Ev
  virtual void  v62(); // _ZN7S1433C43v62Ev
  virtual void  v63(); // _ZN7S1433C43v63Ev
  virtual void  v64(); // _ZN7S1433C43v64Ev
  virtual void  v65(); // _ZN7S1433C43v65Ev
  virtual void  v66(); // _ZN7S1433C43v66Ev
  virtual void  v67(); // _ZN7S1433C43v67Ev
  S1433C4(); // tgen
};
//SIG(-1 S1433C4) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S1433C4 ::~S1433C4(){ note_dtor("S1433C4", this);}
void  S1433C4 ::v4(){vfunc_called(this, "_ZN7S1433C42v4Ev");}
void  S1433C4 ::v5(){vfunc_called(this, "_ZN7S1433C42v5Ev");}
void  S1433C4 ::v6(){vfunc_called(this, "_ZN7S1433C42v6Ev");}
void  S1433C4 ::v7(){vfunc_called(this, "_ZN7S1433C42v7Ev");}
void  S1433C4 ::v8(){vfunc_called(this, "_ZN7S1433C42v8Ev");}
void  S1433C4 ::v9(){vfunc_called(this, "_ZN7S1433C42v9Ev");}
void  S1433C4 ::v10(){vfunc_called(this, "_ZN7S1433C43v10Ev");}
void  S1433C4 ::v11(){vfunc_called(this, "_ZN7S1433C43v11Ev");}
void  S1433C4 ::v12(){vfunc_called(this, "_ZN7S1433C43v12Ev");}
void  S1433C4 ::v13(){vfunc_called(this, "_ZN7S1433C43v13Ev");}
void  S1433C4 ::v14(){vfunc_called(this, "_ZN7S1433C43v14Ev");}
void  S1433C4 ::v15(){vfunc_called(this, "_ZN7S1433C43v15Ev");}
void  S1433C4 ::v16(){vfunc_called(this, "_ZN7S1433C43v16Ev");}
void  S1433C4 ::v17(){vfunc_called(this, "_ZN7S1433C43v17Ev");}
void  S1433C4 ::v18(){vfunc_called(this, "_ZN7S1433C43v18Ev");}
void  S1433C4 ::v19(){vfunc_called(this, "_ZN7S1433C43v19Ev");}
void  S1433C4 ::v20(){vfunc_called(this, "_ZN7S1433C43v20Ev");}
void  S1433C4 ::v21(){vfunc_called(this, "_ZN7S1433C43v21Ev");}
void  S1433C4 ::v22(){vfunc_called(this, "_ZN7S1433C43v22Ev");}
void  S1433C4 ::v23(){vfunc_called(this, "_ZN7S1433C43v23Ev");}
void  S1433C4 ::v24(){vfunc_called(this, "_ZN7S1433C43v24Ev");}
void  S1433C4 ::v25(){vfunc_called(this, "_ZN7S1433C43v25Ev");}
void  S1433C4 ::v26(){vfunc_called(this, "_ZN7S1433C43v26Ev");}
void  S1433C4 ::v27(){vfunc_called(this, "_ZN7S1433C43v27Ev");}
void  S1433C4 ::v28(){vfunc_called(this, "_ZN7S1433C43v28Ev");}
void  S1433C4 ::v29(){vfunc_called(this, "_ZN7S1433C43v29Ev");}
void  S1433C4 ::v30(){vfunc_called(this, "_ZN7S1433C43v30Ev");}
void  S1433C4 ::v31(){vfunc_called(this, "_ZN7S1433C43v31Ev");}
void  S1433C4 ::v32(){vfunc_called(this, "_ZN7S1433C43v32Ev");}
void  S1433C4 ::v33(){vfunc_called(this, "_ZN7S1433C43v33Ev");}
void  S1433C4 ::v34(){vfunc_called(this, "_ZN7S1433C43v34Ev");}
void  S1433C4 ::v35(){vfunc_called(this, "_ZN7S1433C43v35Ev");}
void  S1433C4 ::v36(){vfunc_called(this, "_ZN7S1433C43v36Ev");}
void  S1433C4 ::v37(){vfunc_called(this, "_ZN7S1433C43v37Ev");}
void  S1433C4 ::v38(){vfunc_called(this, "_ZN7S1433C43v38Ev");}
void  S1433C4 ::v39(){vfunc_called(this, "_ZN7S1433C43v39Ev");}
void  S1433C4 ::v40(){vfunc_called(this, "_ZN7S1433C43v40Ev");}
void  S1433C4 ::v41(){vfunc_called(this, "_ZN7S1433C43v41Ev");}
void  S1433C4 ::v42(){vfunc_called(this, "_ZN7S1433C43v42Ev");}
void  S1433C4 ::v43(){vfunc_called(this, "_ZN7S1433C43v43Ev");}
void  S1433C4 ::v44(){vfunc_called(this, "_ZN7S1433C43v44Ev");}
void  S1433C4 ::v45(){vfunc_called(this, "_ZN7S1433C43v45Ev");}
void  S1433C4 ::v46(){vfunc_called(this, "_ZN7S1433C43v46Ev");}
void  S1433C4 ::v47(){vfunc_called(this, "_ZN7S1433C43v47Ev");}
void  S1433C4 ::v48(){vfunc_called(this, "_ZN7S1433C43v48Ev");}
void  S1433C4 ::v49(){vfunc_called(this, "_ZN7S1433C43v49Ev");}
void  S1433C4 ::v50(){vfunc_called(this, "_ZN7S1433C43v50Ev");}
void  S1433C4 ::v51(){vfunc_called(this, "_ZN7S1433C43v51Ev");}
void  S1433C4 ::v52(){vfunc_called(this, "_ZN7S1433C43v52Ev");}
void  S1433C4 ::v53(){vfunc_called(this, "_ZN7S1433C43v53Ev");}
void  S1433C4 ::v54(){vfunc_called(this, "_ZN7S1433C43v54Ev");}
void  S1433C4 ::v55(){vfunc_called(this, "_ZN7S1433C43v55Ev");}
void  S1433C4 ::v56(){vfunc_called(this, "_ZN7S1433C43v56Ev");}
void  S1433C4 ::v57(){vfunc_called(this, "_ZN7S1433C43v57Ev");}
void  S1433C4 ::v58(){vfunc_called(this, "_ZN7S1433C43v58Ev");}
void  S1433C4 ::v59(){vfunc_called(this, "_ZN7S1433C43v59Ev");}
void  S1433C4 ::v60(){vfunc_called(this, "_ZN7S1433C43v60Ev");}
void  S1433C4 ::v61(){vfunc_called(this, "_ZN7S1433C43v61Ev");}
void  S1433C4 ::v62(){vfunc_called(this, "_ZN7S1433C43v62Ev");}
void  S1433C4 ::v63(){vfunc_called(this, "_ZN7S1433C43v63Ev");}
void  S1433C4 ::v64(){vfunc_called(this, "_ZN7S1433C43v64Ev");}
void  S1433C4 ::v65(){vfunc_called(this, "_ZN7S1433C43v65Ev");}
void  S1433C4 ::v66(){vfunc_called(this, "_ZN7S1433C43v66Ev");}
void  S1433C4 ::v67(){vfunc_called(this, "_ZN7S1433C43v67Ev");}
S1433C4 ::S1433C4(){ note_ctor("S1433C4", this);} // tgen

static void Test_S1433C4()
{
  extern Class_Descriptor cd_S1433C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1433C4, buf);
    S1433C4 *dp, &lv = *(dp=new (buf) S1433C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1433C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1433C4)");
    check_field_offset(lv, s1433c4f0, ABISELECT(8,4), "S1433C4.s1433c4f0");
    check_field_offset(lv, s1433c4f1, ABISELECT(16,8), "S1433C4.s1433c4f1");
    check_field_offset(lv, s1433c4f2, ABISELECT(24,16), "S1433C4.s1433c4f2");
    check_field_offset(lv, s1433c4f3, ABISELECT(56,32), "S1433C4.s1433c4f3");
    check_field_offset(lv, s1433c4f4, ABISELECT(64,40), "S1433C4.s1433c4f4");
    check_field_offset(lv, s1433c4f5, ABISELECT(72,44), "S1433C4.s1433c4f5");
    check_field_offset(lv, s1433c4f6, ABISELECT(80,52), "S1433C4.s1433c4f6");
    test_class_info(&lv, &cd_S1433C4);
    dp->~S1433C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1433C4(Test_S1433C4, "S1433C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1433C4C1Ev();
extern void _ZN7S1433C4D1Ev();
Name_Map name_map_S1433C4[] = {
  NSPAIR(_ZN7S1433C4C1Ev),
  NSPAIR(_ZN7S1433C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1433C4[];
extern void _ZN7S1433C4D1Ev();
extern void _ZN7S1433C4D0Ev();
extern void _ZN7S1433C42v4Ev();
extern void _ZN7S1433C42v5Ev();
extern void _ZN7S1433C42v6Ev();
extern void _ZN7S1433C42v7Ev();
extern void _ZN7S1433C42v8Ev();
extern void _ZN7S1433C42v9Ev();
extern void _ZN7S1433C43v10Ev();
extern void _ZN7S1433C43v11Ev();
extern void _ZN7S1433C43v12Ev();
extern void _ZN7S1433C43v13Ev();
extern void _ZN7S1433C43v14Ev();
extern void _ZN7S1433C43v15Ev();
extern void _ZN7S1433C43v16Ev();
extern void _ZN7S1433C43v17Ev();
extern void _ZN7S1433C43v18Ev();
extern void _ZN7S1433C43v19Ev();
extern void _ZN7S1433C43v20Ev();
extern void _ZN7S1433C43v21Ev();
extern void _ZN7S1433C43v22Ev();
extern void _ZN7S1433C43v23Ev();
extern void _ZN7S1433C43v24Ev();
extern void _ZN7S1433C43v25Ev();
extern void _ZN7S1433C43v26Ev();
extern void _ZN7S1433C43v27Ev();
extern void _ZN7S1433C43v28Ev();
extern void _ZN7S1433C43v29Ev();
extern void _ZN7S1433C43v30Ev();
extern void _ZN7S1433C43v31Ev();
extern void _ZN7S1433C43v32Ev();
extern void _ZN7S1433C43v33Ev();
extern void _ZN7S1433C43v34Ev();
extern void _ZN7S1433C43v35Ev();
extern void _ZN7S1433C43v36Ev();
extern void _ZN7S1433C43v37Ev();
extern void _ZN7S1433C43v38Ev();
extern void _ZN7S1433C43v39Ev();
extern void _ZN7S1433C43v40Ev();
extern void _ZN7S1433C43v41Ev();
extern void _ZN7S1433C43v42Ev();
extern void _ZN7S1433C43v43Ev();
extern void _ZN7S1433C43v44Ev();
extern void _ZN7S1433C43v45Ev();
extern void _ZN7S1433C43v46Ev();
extern void _ZN7S1433C43v47Ev();
extern void _ZN7S1433C43v48Ev();
extern void _ZN7S1433C43v49Ev();
extern void _ZN7S1433C43v50Ev();
extern void _ZN7S1433C43v51Ev();
extern void _ZN7S1433C43v52Ev();
extern void _ZN7S1433C43v53Ev();
extern void _ZN7S1433C43v54Ev();
extern void _ZN7S1433C43v55Ev();
extern void _ZN7S1433C43v56Ev();
extern void _ZN7S1433C43v57Ev();
extern void _ZN7S1433C43v58Ev();
extern void _ZN7S1433C43v59Ev();
extern void _ZN7S1433C43v60Ev();
extern void _ZN7S1433C43v61Ev();
extern void _ZN7S1433C43v62Ev();
extern void _ZN7S1433C43v63Ev();
extern void _ZN7S1433C43v64Ev();
extern void _ZN7S1433C43v65Ev();
extern void _ZN7S1433C43v66Ev();
extern void _ZN7S1433C43v67Ev();
static  VTBL_ENTRY vtc_S1433C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1433C4[0]),
  (VTBL_ENTRY)&_ZN7S1433C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1433C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v67Ev,
};
extern VTBL_ENTRY _ZTI7S1433C4[];
extern  VTBL_ENTRY _ZTV7S1433C4[];
Class_Descriptor cd_S1433C4 = {  "S1433C4", // class name
  0,0,//no base classes
  &(vtc_S1433C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1433C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1433C4),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1433C3  : S1433C4 {
  void *s1433c3f0;
  ::S3432C14_nt s1433c3f1;
  int s1433c3f2[5];
  unsigned int s1433c3f3:1;
  unsigned int s1433c3f4:1;
  unsigned int s1433c3f5:1;
  unsigned int s1433c3f6:1;
  unsigned int s1433c3f7:1;
  ::S273C21 s1433c3f8;
  ::S273C17 s1433c3f9;
  unsigned int s1433c3f10:1;
  int s1433c3f11[2];
  void *s1433c3f12;
  int s1433c3f13[3];
  virtual  ~S1433C3(); // _ZN7S1433C3D1Ev
  virtual void  v68(); // _ZN7S1433C33v68Ev
  virtual void  v69(); // _ZN7S1433C33v69Ev
  virtual void  v70(); // _ZN7S1433C33v70Ev
  virtual void  v71(); // _ZN7S1433C33v71Ev
  virtual void  v72(); // _ZN7S1433C33v72Ev
  virtual void  v73(); // _ZN7S1433C33v73Ev
  virtual void  v74(); // _ZN7S1433C33v74Ev
  virtual void  v75(); // _ZN7S1433C33v75Ev
  virtual void  v76(); // _ZN7S1433C33v76Ev
  virtual void  v77(); // _ZN7S1433C33v77Ev
  virtual void  v78(); // _ZN7S1433C33v78Ev
  virtual void  v79(); // _ZN7S1433C33v79Ev
  virtual void  v80(); // _ZN7S1433C33v80Ev
  S1433C3(); // tgen
};
//SIG(-1 S1433C3) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S1433C3 ::~S1433C3(){ note_dtor("S1433C3", this);}
void  S1433C3 ::v68(){vfunc_called(this, "_ZN7S1433C33v68Ev");}
void  S1433C3 ::v69(){vfunc_called(this, "_ZN7S1433C33v69Ev");}
void  S1433C3 ::v70(){vfunc_called(this, "_ZN7S1433C33v70Ev");}
void  S1433C3 ::v71(){vfunc_called(this, "_ZN7S1433C33v71Ev");}
void  S1433C3 ::v72(){vfunc_called(this, "_ZN7S1433C33v72Ev");}
void  S1433C3 ::v73(){vfunc_called(this, "_ZN7S1433C33v73Ev");}
void  S1433C3 ::v74(){vfunc_called(this, "_ZN7S1433C33v74Ev");}
void  S1433C3 ::v75(){vfunc_called(this, "_ZN7S1433C33v75Ev");}
void  S1433C3 ::v76(){vfunc_called(this, "_ZN7S1433C33v76Ev");}
void  S1433C3 ::v77(){vfunc_called(this, "_ZN7S1433C33v77Ev");}
void  S1433C3 ::v78(){vfunc_called(this, "_ZN7S1433C33v78Ev");}
void  S1433C3 ::v79(){vfunc_called(this, "_ZN7S1433C33v79Ev");}
void  S1433C3 ::v80(){vfunc_called(this, "_ZN7S1433C33v80Ev");}
S1433C3 ::S1433C3(){ note_ctor("S1433C3", this);} // tgen

static void Test_S1433C3()
{
  extern Class_Descriptor cd_S1433C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S1433C3, buf);
    S1433C3 *dp, &lv = *(dp=new (buf) S1433C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S1433C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1433C3)");
    check_base_class_offset(lv, (S1433C4*), 0, "S1433C3");
    check_field_offset(lv, s1433c3f0, ABISELECT(96,60), "S1433C3.s1433c3f0");
    check_field_offset(lv, s1433c3f1, ABISELECT(104,64), "S1433C3.s1433c3f1");
    check_field_offset(lv, s1433c3f2, ABISELECT(112,72), "S1433C3.s1433c3f2");
    set_bf_and_test(lv, s1433c3f3, ABISELECT(132,92), 0, 1, 1, "S1433C3");
    set_bf_and_test(lv, s1433c3f4, ABISELECT(132,92), 1, 1, 1, "S1433C3");
    set_bf_and_test(lv, s1433c3f5, ABISELECT(132,92), 2, 1, 1, "S1433C3");
    set_bf_and_test(lv, s1433c3f6, ABISELECT(132,92), 3, 1, 1, "S1433C3");
    set_bf_and_test(lv, s1433c3f7, ABISELECT(132,92), 4, 1, 1, "S1433C3");
    check_field_offset(lv, s1433c3f8, ABISELECT(136,96), "S1433C3.s1433c3f8");
    check_field_offset(lv, s1433c3f9, ABISELECT(152,108), "S1433C3.s1433c3f9");
    set_bf_and_test(lv, s1433c3f10, ABISELECT(168,120), 0, 1, 1, "S1433C3");
    check_field_offset(lv, s1433c3f11, ABISELECT(172,124), "S1433C3.s1433c3f11");
    check_field_offset(lv, s1433c3f12, ABISELECT(184,132), "S1433C3.s1433c3f12");
    check_field_offset(lv, s1433c3f13, ABISELECT(192,136), "S1433C3.s1433c3f13");
    test_class_info(&lv, &cd_S1433C3);
    dp->~S1433C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1433C3(Test_S1433C3, "S1433C3", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S1433C3C1Ev();
extern void _ZN7S1433C3D1Ev();
Name_Map name_map_S1433C3[] = {
  NSPAIR(_ZN7S1433C3C1Ev),
  NSPAIR(_ZN7S1433C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1433C4;
extern VTBL_ENTRY _ZTI7S1433C4[];
extern  VTBL_ENTRY _ZTV7S1433C4[];
static Base_Class bases_S1433C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1433C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1433C3[];
extern void _ZN7S1433C3D1Ev();
extern void _ZN7S1433C3D0Ev();
extern void _ZN7S1433C42v4Ev();
extern void _ZN7S1433C42v5Ev();
extern void _ZN7S1433C42v6Ev();
extern void _ZN7S1433C42v7Ev();
extern void _ZN7S1433C42v8Ev();
extern void _ZN7S1433C42v9Ev();
extern void _ZN7S1433C43v10Ev();
extern void _ZN7S1433C43v11Ev();
extern void _ZN7S1433C43v12Ev();
extern void _ZN7S1433C43v13Ev();
extern void _ZN7S1433C43v14Ev();
extern void _ZN7S1433C43v15Ev();
extern void _ZN7S1433C43v16Ev();
extern void _ZN7S1433C43v17Ev();
extern void _ZN7S1433C43v18Ev();
extern void _ZN7S1433C43v19Ev();
extern void _ZN7S1433C43v20Ev();
extern void _ZN7S1433C43v21Ev();
extern void _ZN7S1433C43v22Ev();
extern void _ZN7S1433C43v23Ev();
extern void _ZN7S1433C43v24Ev();
extern void _ZN7S1433C43v25Ev();
extern void _ZN7S1433C43v26Ev();
extern void _ZN7S1433C43v27Ev();
extern void _ZN7S1433C43v28Ev();
extern void _ZN7S1433C43v29Ev();
extern void _ZN7S1433C43v30Ev();
extern void _ZN7S1433C43v31Ev();
extern void _ZN7S1433C43v32Ev();
extern void _ZN7S1433C43v33Ev();
extern void _ZN7S1433C43v34Ev();
extern void _ZN7S1433C43v35Ev();
extern void _ZN7S1433C43v36Ev();
extern void _ZN7S1433C43v37Ev();
extern void _ZN7S1433C43v38Ev();
extern void _ZN7S1433C43v39Ev();
extern void _ZN7S1433C43v40Ev();
extern void _ZN7S1433C43v41Ev();
extern void _ZN7S1433C43v42Ev();
extern void _ZN7S1433C43v43Ev();
extern void _ZN7S1433C43v44Ev();
extern void _ZN7S1433C43v45Ev();
extern void _ZN7S1433C43v46Ev();
extern void _ZN7S1433C43v47Ev();
extern void _ZN7S1433C43v48Ev();
extern void _ZN7S1433C43v49Ev();
extern void _ZN7S1433C43v50Ev();
extern void _ZN7S1433C43v51Ev();
extern void _ZN7S1433C43v52Ev();
extern void _ZN7S1433C43v53Ev();
extern void _ZN7S1433C43v54Ev();
extern void _ZN7S1433C43v55Ev();
extern void _ZN7S1433C43v56Ev();
extern void _ZN7S1433C43v57Ev();
extern void _ZN7S1433C43v58Ev();
extern void _ZN7S1433C43v59Ev();
extern void _ZN7S1433C43v60Ev();
extern void _ZN7S1433C43v61Ev();
extern void _ZN7S1433C43v62Ev();
extern void _ZN7S1433C43v63Ev();
extern void _ZN7S1433C43v64Ev();
extern void _ZN7S1433C43v65Ev();
extern void _ZN7S1433C43v66Ev();
extern void _ZN7S1433C43v67Ev();
extern void _ZN7S1433C33v68Ev();
extern void _ZN7S1433C33v69Ev();
extern void _ZN7S1433C33v70Ev();
extern void _ZN7S1433C33v71Ev();
extern void _ZN7S1433C33v72Ev();
extern void _ZN7S1433C33v73Ev();
extern void _ZN7S1433C33v74Ev();
extern void _ZN7S1433C33v75Ev();
extern void _ZN7S1433C33v76Ev();
extern void _ZN7S1433C33v77Ev();
extern void _ZN7S1433C33v78Ev();
extern void _ZN7S1433C33v79Ev();
extern void _ZN7S1433C33v80Ev();
static  VTBL_ENTRY vtc_S1433C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1433C3[0]),
  (VTBL_ENTRY)&_ZN7S1433C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1433C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v80Ev,
};
extern VTBL_ENTRY _ZTI7S1433C3[];
extern  VTBL_ENTRY _ZTV7S1433C3[];
Class_Descriptor cd_S1433C3 = {  "S1433C3", // class name
  bases_S1433C3, 1,
  &(vtc_S1433C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S1433C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1433C3),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1433C2  : S1433C3 {
  unsigned int s1433c2f0:1;
  unsigned int s1433c2f1:1;
  unsigned int s1433c2f2:1;
  unsigned int s1433c2f3:1;
  ::S664C12_nt s1433c2f4;
  char s1433c2f5[2];
  ::S3432C14_nt s1433c2f6;
  ::S632C13 s1433c2f7;
  ::S3432C14_nt s1433c2f8;
  virtual  ~S1433C2(); // _ZN7S1433C2D1Ev
  virtual void  v81(); // _ZN7S1433C23v81Ev
  virtual void  v82(); // _ZN7S1433C23v82Ev
  virtual void  v83(); // _ZN7S1433C23v83Ev
  virtual void  v84(); // _ZN7S1433C23v84Ev
  virtual void  v85(); // _ZN7S1433C23v85Ev
  virtual void  v86(); // _ZN7S1433C23v86Ev
  virtual void  v87(); // _ZN7S1433C23v87Ev
  S1433C2(); // tgen
};
//SIG(-1 S1433C2) C1{ BC2{ BC3{ vd v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 v6 v7 Fi:1 Fi:1 Fi:1 Fi:1 FC10{ m Fi[3]} Fc[2] FC4 FC11{ m Fi[3]} FC4}


 S1433C2 ::~S1433C2(){ note_dtor("S1433C2", this);}
void  S1433C2 ::v81(){vfunc_called(this, "_ZN7S1433C23v81Ev");}
void  S1433C2 ::v82(){vfunc_called(this, "_ZN7S1433C23v82Ev");}
void  S1433C2 ::v83(){vfunc_called(this, "_ZN7S1433C23v83Ev");}
void  S1433C2 ::v84(){vfunc_called(this, "_ZN7S1433C23v84Ev");}
void  S1433C2 ::v85(){vfunc_called(this, "_ZN7S1433C23v85Ev");}
void  S1433C2 ::v86(){vfunc_called(this, "_ZN7S1433C23v86Ev");}
void  S1433C2 ::v87(){vfunc_called(this, "_ZN7S1433C23v87Ev");}
S1433C2 ::S1433C2(){ note_ctor("S1433C2", this);} // tgen

static void Test_S1433C2()
{
  extern Class_Descriptor cd_S1433C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S1433C2, buf);
    S1433C2 *dp, &lv = *(dp=new (buf) S1433C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S1433C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1433C2)");
    check_base_class_offset(lv, (S1433C4*)(S1433C3*), 0, "S1433C2");
    check_base_class_offset(lv, (S1433C3*), 0, "S1433C2");
    set_bf_and_test(lv, s1433c2f0, ABISELECT(204,148), 0, 1, 1, "S1433C2");
    set_bf_and_test(lv, s1433c2f1, ABISELECT(204,148), 1, 1, 1, "S1433C2");
    set_bf_and_test(lv, s1433c2f2, ABISELECT(204,148), 2, 1, 1, "S1433C2");
    set_bf_and_test(lv, s1433c2f3, ABISELECT(204,148), 3, 1, 1, "S1433C2");
    check_field_offset(lv, s1433c2f4, ABISELECT(208,152), "S1433C2.s1433c2f4");
    check_field_offset(lv, s1433c2f5, ABISELECT(220,164), "S1433C2.s1433c2f5");
    check_field_offset(lv, s1433c2f6, ABISELECT(224,168), "S1433C2.s1433c2f6");
    check_field_offset(lv, s1433c2f7, ABISELECT(232,176), "S1433C2.s1433c2f7");
    check_field_offset(lv, s1433c2f8, ABISELECT(244,188), "S1433C2.s1433c2f8");
    test_class_info(&lv, &cd_S1433C2);
    dp->~S1433C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1433C2(Test_S1433C2, "S1433C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S1433C2C1Ev();
extern void _ZN7S1433C2D1Ev();
Name_Map name_map_S1433C2[] = {
  NSPAIR(_ZN7S1433C2C1Ev),
  NSPAIR(_ZN7S1433C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1433C4;
extern VTBL_ENTRY _ZTI7S1433C4[];
extern  VTBL_ENTRY _ZTV7S1433C4[];
extern Class_Descriptor cd_S1433C3;
extern VTBL_ENTRY _ZTI7S1433C3[];
extern  VTBL_ENTRY _ZTV7S1433C3[];
static Base_Class bases_S1433C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1433C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1433C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1433C2[];
extern void _ZN7S1433C2D1Ev();
extern void _ZN7S1433C2D0Ev();
extern void _ZN7S1433C42v4Ev();
extern void _ZN7S1433C42v5Ev();
extern void _ZN7S1433C42v6Ev();
extern void _ZN7S1433C42v7Ev();
extern void _ZN7S1433C42v8Ev();
extern void _ZN7S1433C42v9Ev();
extern void _ZN7S1433C43v10Ev();
extern void _ZN7S1433C43v11Ev();
extern void _ZN7S1433C43v12Ev();
extern void _ZN7S1433C43v13Ev();
extern void _ZN7S1433C43v14Ev();
extern void _ZN7S1433C43v15Ev();
extern void _ZN7S1433C43v16Ev();
extern void _ZN7S1433C43v17Ev();
extern void _ZN7S1433C43v18Ev();
extern void _ZN7S1433C43v19Ev();
extern void _ZN7S1433C43v20Ev();
extern void _ZN7S1433C43v21Ev();
extern void _ZN7S1433C43v22Ev();
extern void _ZN7S1433C43v23Ev();
extern void _ZN7S1433C43v24Ev();
extern void _ZN7S1433C43v25Ev();
extern void _ZN7S1433C43v26Ev();
extern void _ZN7S1433C43v27Ev();
extern void _ZN7S1433C43v28Ev();
extern void _ZN7S1433C43v29Ev();
extern void _ZN7S1433C43v30Ev();
extern void _ZN7S1433C43v31Ev();
extern void _ZN7S1433C43v32Ev();
extern void _ZN7S1433C43v33Ev();
extern void _ZN7S1433C43v34Ev();
extern void _ZN7S1433C43v35Ev();
extern void _ZN7S1433C43v36Ev();
extern void _ZN7S1433C43v37Ev();
extern void _ZN7S1433C43v38Ev();
extern void _ZN7S1433C43v39Ev();
extern void _ZN7S1433C43v40Ev();
extern void _ZN7S1433C43v41Ev();
extern void _ZN7S1433C43v42Ev();
extern void _ZN7S1433C43v43Ev();
extern void _ZN7S1433C43v44Ev();
extern void _ZN7S1433C43v45Ev();
extern void _ZN7S1433C43v46Ev();
extern void _ZN7S1433C43v47Ev();
extern void _ZN7S1433C43v48Ev();
extern void _ZN7S1433C43v49Ev();
extern void _ZN7S1433C43v50Ev();
extern void _ZN7S1433C43v51Ev();
extern void _ZN7S1433C43v52Ev();
extern void _ZN7S1433C43v53Ev();
extern void _ZN7S1433C43v54Ev();
extern void _ZN7S1433C43v55Ev();
extern void _ZN7S1433C43v56Ev();
extern void _ZN7S1433C43v57Ev();
extern void _ZN7S1433C43v58Ev();
extern void _ZN7S1433C43v59Ev();
extern void _ZN7S1433C43v60Ev();
extern void _ZN7S1433C43v61Ev();
extern void _ZN7S1433C43v62Ev();
extern void _ZN7S1433C43v63Ev();
extern void _ZN7S1433C43v64Ev();
extern void _ZN7S1433C43v65Ev();
extern void _ZN7S1433C43v66Ev();
extern void _ZN7S1433C43v67Ev();
extern void _ZN7S1433C33v68Ev();
extern void _ZN7S1433C33v69Ev();
extern void _ZN7S1433C33v70Ev();
extern void _ZN7S1433C33v71Ev();
extern void _ZN7S1433C33v72Ev();
extern void _ZN7S1433C33v73Ev();
extern void _ZN7S1433C33v74Ev();
extern void _ZN7S1433C33v75Ev();
extern void _ZN7S1433C33v76Ev();
extern void _ZN7S1433C33v77Ev();
extern void _ZN7S1433C33v78Ev();
extern void _ZN7S1433C33v79Ev();
extern void _ZN7S1433C33v80Ev();
extern void _ZN7S1433C23v81Ev();
extern void _ZN7S1433C23v82Ev();
extern void _ZN7S1433C23v83Ev();
extern void _ZN7S1433C23v84Ev();
extern void _ZN7S1433C23v85Ev();
extern void _ZN7S1433C23v86Ev();
extern void _ZN7S1433C23v87Ev();
static  VTBL_ENTRY vtc_S1433C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1433C2[0]),
  (VTBL_ENTRY)&_ZN7S1433C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1433C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1433C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1433C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1433C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1433C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1433C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1433C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1433C23v87Ev,
};
extern VTBL_ENTRY _ZTI7S1433C2[];
extern  VTBL_ENTRY _ZTV7S1433C2[];
Class_Descriptor cd_S1433C2 = {  "S1433C2", // class name
  bases_S1433C2, 2,
  &(vtc_S1433C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S1433C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1433C2),88, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1433C1  : S1433C2 {
  int s1433c1f0[9];
  virtual  ~S1433C1(); // _ZN7S1433C1D1Ev
  virtual void  v1(); // _ZN7S1433C12v1Ev
  virtual void  v2(); // _ZN7S1433C12v2Ev
  virtual void  v3(); // _ZN7S1433C12v3Ev
  S1433C1(); // tgen
};
//SIG(1 S1433C1) C1{ BC2{ BC3{ BC4{ vd v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 Fp FC5 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC9{ BC10{ BC8}} Fi:1 Fi[2] Fp Fi[3]} vd v81 v82 v83 v84 v85 v86 v87 Fi:1 Fi:1 Fi:1 Fi:1 FC11{ m Fi[3]} Fc[2] FC5 FC12{ m Fi[3]} FC5} vd v1 v2 v3 Fi[9]}


 S1433C1 ::~S1433C1(){ note_dtor("S1433C1", this);}
void  S1433C1 ::v1(){vfunc_called(this, "_ZN7S1433C12v1Ev");}
void  S1433C1 ::v2(){vfunc_called(this, "_ZN7S1433C12v2Ev");}
void  S1433C1 ::v3(){vfunc_called(this, "_ZN7S1433C12v3Ev");}
S1433C1 ::S1433C1(){ note_ctor("S1433C1", this);} // tgen

static void Test_S1433C1()
{
  extern Class_Descriptor cd_S1433C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,59)];
    init_test(&cd_S1433C1, buf);
    S1433C1 *dp, &lv = *(dp=new (buf) S1433C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,232), "sizeof(S1433C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1433C1)");
    check_base_class_offset(lv, (S1433C4*)(S1433C3*)(S1433C2*), 0, "S1433C1");
    check_base_class_offset(lv, (S1433C3*)(S1433C2*), 0, "S1433C1");
    check_base_class_offset(lv, (S1433C2*), 0, "S1433C1");
    check_field_offset(lv, s1433c1f0, ABISELECT(252,196), "S1433C1.s1433c1f0");
    test_class_info(&lv, &cd_S1433C1);
    dp->~S1433C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1433C1(Test_S1433C1, "S1433C1", ABISELECT(288,232));

#else // __cplusplus

extern void _ZN7S1433C1C1Ev();
extern void _ZN7S1433C1D1Ev();
Name_Map name_map_S1433C1[] = {
  NSPAIR(_ZN7S1433C1C1Ev),
  NSPAIR(_ZN7S1433C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1433C4;
extern VTBL_ENTRY _ZTI7S1433C4[];
extern  VTBL_ENTRY _ZTV7S1433C4[];
extern Class_Descriptor cd_S1433C3;
extern VTBL_ENTRY _ZTI7S1433C3[];
extern  VTBL_ENTRY _ZTV7S1433C3[];
extern Class_Descriptor cd_S1433C2;
extern VTBL_ENTRY _ZTI7S1433C2[];
extern  VTBL_ENTRY _ZTV7S1433C2[];
static Base_Class bases_S1433C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1433C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1433C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1433C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1433C1[];
extern void _ZN7S1433C1D1Ev();
extern void _ZN7S1433C1D0Ev();
extern void _ZN7S1433C42v4Ev();
extern void _ZN7S1433C42v5Ev();
extern void _ZN7S1433C42v6Ev();
extern void _ZN7S1433C42v7Ev();
extern void _ZN7S1433C42v8Ev();
extern void _ZN7S1433C42v9Ev();
extern void _ZN7S1433C43v10Ev();
extern void _ZN7S1433C43v11Ev();
extern void _ZN7S1433C43v12Ev();
extern void _ZN7S1433C43v13Ev();
extern void _ZN7S1433C43v14Ev();
extern void _ZN7S1433C43v15Ev();
extern void _ZN7S1433C43v16Ev();
extern void _ZN7S1433C43v17Ev();
extern void _ZN7S1433C43v18Ev();
extern void _ZN7S1433C43v19Ev();
extern void _ZN7S1433C43v20Ev();
extern void _ZN7S1433C43v21Ev();
extern void _ZN7S1433C43v22Ev();
extern void _ZN7S1433C43v23Ev();
extern void _ZN7S1433C43v24Ev();
extern void _ZN7S1433C43v25Ev();
extern void _ZN7S1433C43v26Ev();
extern void _ZN7S1433C43v27Ev();
extern void _ZN7S1433C43v28Ev();
extern void _ZN7S1433C43v29Ev();
extern void _ZN7S1433C43v30Ev();
extern void _ZN7S1433C43v31Ev();
extern void _ZN7S1433C43v32Ev();
extern void _ZN7S1433C43v33Ev();
extern void _ZN7S1433C43v34Ev();
extern void _ZN7S1433C43v35Ev();
extern void _ZN7S1433C43v36Ev();
extern void _ZN7S1433C43v37Ev();
extern void _ZN7S1433C43v38Ev();
extern void _ZN7S1433C43v39Ev();
extern void _ZN7S1433C43v40Ev();
extern void _ZN7S1433C43v41Ev();
extern void _ZN7S1433C43v42Ev();
extern void _ZN7S1433C43v43Ev();
extern void _ZN7S1433C43v44Ev();
extern void _ZN7S1433C43v45Ev();
extern void _ZN7S1433C43v46Ev();
extern void _ZN7S1433C43v47Ev();
extern void _ZN7S1433C43v48Ev();
extern void _ZN7S1433C43v49Ev();
extern void _ZN7S1433C43v50Ev();
extern void _ZN7S1433C43v51Ev();
extern void _ZN7S1433C43v52Ev();
extern void _ZN7S1433C43v53Ev();
extern void _ZN7S1433C43v54Ev();
extern void _ZN7S1433C43v55Ev();
extern void _ZN7S1433C43v56Ev();
extern void _ZN7S1433C43v57Ev();
extern void _ZN7S1433C43v58Ev();
extern void _ZN7S1433C43v59Ev();
extern void _ZN7S1433C43v60Ev();
extern void _ZN7S1433C43v61Ev();
extern void _ZN7S1433C43v62Ev();
extern void _ZN7S1433C43v63Ev();
extern void _ZN7S1433C43v64Ev();
extern void _ZN7S1433C43v65Ev();
extern void _ZN7S1433C43v66Ev();
extern void _ZN7S1433C43v67Ev();
extern void _ZN7S1433C33v68Ev();
extern void _ZN7S1433C33v69Ev();
extern void _ZN7S1433C33v70Ev();
extern void _ZN7S1433C33v71Ev();
extern void _ZN7S1433C33v72Ev();
extern void _ZN7S1433C33v73Ev();
extern void _ZN7S1433C33v74Ev();
extern void _ZN7S1433C33v75Ev();
extern void _ZN7S1433C33v76Ev();
extern void _ZN7S1433C33v77Ev();
extern void _ZN7S1433C33v78Ev();
extern void _ZN7S1433C33v79Ev();
extern void _ZN7S1433C33v80Ev();
extern void _ZN7S1433C23v81Ev();
extern void _ZN7S1433C23v82Ev();
extern void _ZN7S1433C23v83Ev();
extern void _ZN7S1433C23v84Ev();
extern void _ZN7S1433C23v85Ev();
extern void _ZN7S1433C23v86Ev();
extern void _ZN7S1433C23v87Ev();
extern void _ZN7S1433C12v1Ev();
extern void _ZN7S1433C12v2Ev();
extern void _ZN7S1433C12v3Ev();
static  VTBL_ENTRY vtc_S1433C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1433C1[0]),
  (VTBL_ENTRY)&_ZN7S1433C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1433C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v4Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v5Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v6Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1433C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1433C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v68Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v69Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v70Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1433C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1433C23v81Ev,
  (VTBL_ENTRY)&_ZN7S1433C23v82Ev,
  (VTBL_ENTRY)&_ZN7S1433C23v83Ev,
  (VTBL_ENTRY)&_ZN7S1433C23v84Ev,
  (VTBL_ENTRY)&_ZN7S1433C23v85Ev,
  (VTBL_ENTRY)&_ZN7S1433C23v86Ev,
  (VTBL_ENTRY)&_ZN7S1433C23v87Ev,
  (VTBL_ENTRY)&_ZN7S1433C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1433C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1433C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S1433C1[];
extern  VTBL_ENTRY _ZTV7S1433C1[];
Class_Descriptor cd_S1433C1 = {  "S1433C1", // class name
  bases_S1433C1, 3,
  &(vtc_S1433C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(288,232), // object size
  NSPAIRA(_ZTI7S1433C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1433C1),91, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3371C3  {
  int s3371c3f0;
  __tsi64 s3371c3f1;
  void *s3371c3f2[4];
  int s3371c3f3[2];
  void *s3371c3f4;
  ::S3432C14_nt s3371c3f5;
  void *s3371c3f6[2];
  virtual  ~S3371C3(); // _ZN7S3371C3D1Ev
  virtual void  v6(); // _ZN7S3371C32v6Ev
  virtual void  v7(); // _ZN7S3371C32v7Ev
  virtual void  v8(); // _ZN7S3371C32v8Ev
  virtual void  v9(); // _ZN7S3371C32v9Ev
  virtual void  v10(); // _ZN7S3371C33v10Ev
  virtual void  v11(); // _ZN7S3371C33v11Ev
  virtual void  v12(); // _ZN7S3371C33v12Ev
  virtual void  v13(); // _ZN7S3371C33v13Ev
  virtual void  v14(); // _ZN7S3371C33v14Ev
  virtual void  v15(); // _ZN7S3371C33v15Ev
  virtual void  v16(); // _ZN7S3371C33v16Ev
  virtual void  v17(); // _ZN7S3371C33v17Ev
  virtual void  v18(); // _ZN7S3371C33v18Ev
  virtual void  v19(); // _ZN7S3371C33v19Ev
  virtual void  v20(); // _ZN7S3371C33v20Ev
  virtual void  v21(); // _ZN7S3371C33v21Ev
  virtual void  v22(); // _ZN7S3371C33v22Ev
  virtual void  v23(); // _ZN7S3371C33v23Ev
  virtual void  v24(); // _ZN7S3371C33v24Ev
  virtual void  v25(); // _ZN7S3371C33v25Ev
  virtual void  v26(); // _ZN7S3371C33v26Ev
  virtual void  v27(); // _ZN7S3371C33v27Ev
  virtual void  v28(); // _ZN7S3371C33v28Ev
  virtual void  v29(); // _ZN7S3371C33v29Ev
  virtual void  v30(); // _ZN7S3371C33v30Ev
  virtual void  v31(); // _ZN7S3371C33v31Ev
  virtual void  v32(); // _ZN7S3371C33v32Ev
  virtual void  v33(); // _ZN7S3371C33v33Ev
  virtual void  v34(); // _ZN7S3371C33v34Ev
  virtual void  v35(); // _ZN7S3371C33v35Ev
  virtual void  v36(); // _ZN7S3371C33v36Ev
  virtual void  v37(); // _ZN7S3371C33v37Ev
  virtual void  v38(); // _ZN7S3371C33v38Ev
  virtual void  v39(); // _ZN7S3371C33v39Ev
  virtual void  v40(); // _ZN7S3371C33v40Ev
  virtual void  v41(); // _ZN7S3371C33v41Ev
  virtual void  v42(); // _ZN7S3371C33v42Ev
  virtual void  v43(); // _ZN7S3371C33v43Ev
  virtual void  v44(); // _ZN7S3371C33v44Ev
  virtual void  v45(); // _ZN7S3371C33v45Ev
  virtual void  v46(); // _ZN7S3371C33v46Ev
  virtual void  v47(); // _ZN7S3371C33v47Ev
  virtual void  v48(); // _ZN7S3371C33v48Ev
  virtual void  v49(); // _ZN7S3371C33v49Ev
  virtual void  v50(); // _ZN7S3371C33v50Ev
  virtual void  v51(); // _ZN7S3371C33v51Ev
  virtual void  v52(); // _ZN7S3371C33v52Ev
  virtual void  v53(); // _ZN7S3371C33v53Ev
  virtual void  v54(); // _ZN7S3371C33v54Ev
  virtual void  v55(); // _ZN7S3371C33v55Ev
  virtual void  v56(); // _ZN7S3371C33v56Ev
  virtual void  v57(); // _ZN7S3371C33v57Ev
  virtual void  v58(); // _ZN7S3371C33v58Ev
  virtual void  v59(); // _ZN7S3371C33v59Ev
  virtual void  v60(); // _ZN7S3371C33v60Ev
  virtual void  v61(); // _ZN7S3371C33v61Ev
  virtual void  v62(); // _ZN7S3371C33v62Ev
  virtual void  v63(); // _ZN7S3371C33v63Ev
  virtual void  v64(); // _ZN7S3371C33v64Ev
  virtual void  v65(); // _ZN7S3371C33v65Ev
  virtual void  v66(); // _ZN7S3371C33v66Ev
  virtual void  v67(); // _ZN7S3371C33v67Ev
  virtual void  v68(); // _ZN7S3371C33v68Ev
  virtual void  v69(); // _ZN7S3371C33v69Ev
  S3371C3(); // tgen
};
//SIG(-1 S3371C3) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 Fi FL Fp[4] Fi[2] Fp FC2{ m Fi[2]} Fp[2]}


 S3371C3 ::~S3371C3(){ note_dtor("S3371C3", this);}
void  S3371C3 ::v6(){vfunc_called(this, "_ZN7S3371C32v6Ev");}
void  S3371C3 ::v7(){vfunc_called(this, "_ZN7S3371C32v7Ev");}
void  S3371C3 ::v8(){vfunc_called(this, "_ZN7S3371C32v8Ev");}
void  S3371C3 ::v9(){vfunc_called(this, "_ZN7S3371C32v9Ev");}
void  S3371C3 ::v10(){vfunc_called(this, "_ZN7S3371C33v10Ev");}
void  S3371C3 ::v11(){vfunc_called(this, "_ZN7S3371C33v11Ev");}
void  S3371C3 ::v12(){vfunc_called(this, "_ZN7S3371C33v12Ev");}
void  S3371C3 ::v13(){vfunc_called(this, "_ZN7S3371C33v13Ev");}
void  S3371C3 ::v14(){vfunc_called(this, "_ZN7S3371C33v14Ev");}
void  S3371C3 ::v15(){vfunc_called(this, "_ZN7S3371C33v15Ev");}
void  S3371C3 ::v16(){vfunc_called(this, "_ZN7S3371C33v16Ev");}
void  S3371C3 ::v17(){vfunc_called(this, "_ZN7S3371C33v17Ev");}
void  S3371C3 ::v18(){vfunc_called(this, "_ZN7S3371C33v18Ev");}
void  S3371C3 ::v19(){vfunc_called(this, "_ZN7S3371C33v19Ev");}
void  S3371C3 ::v20(){vfunc_called(this, "_ZN7S3371C33v20Ev");}
void  S3371C3 ::v21(){vfunc_called(this, "_ZN7S3371C33v21Ev");}
void  S3371C3 ::v22(){vfunc_called(this, "_ZN7S3371C33v22Ev");}
void  S3371C3 ::v23(){vfunc_called(this, "_ZN7S3371C33v23Ev");}
void  S3371C3 ::v24(){vfunc_called(this, "_ZN7S3371C33v24Ev");}
void  S3371C3 ::v25(){vfunc_called(this, "_ZN7S3371C33v25Ev");}
void  S3371C3 ::v26(){vfunc_called(this, "_ZN7S3371C33v26Ev");}
void  S3371C3 ::v27(){vfunc_called(this, "_ZN7S3371C33v27Ev");}
void  S3371C3 ::v28(){vfunc_called(this, "_ZN7S3371C33v28Ev");}
void  S3371C3 ::v29(){vfunc_called(this, "_ZN7S3371C33v29Ev");}
void  S3371C3 ::v30(){vfunc_called(this, "_ZN7S3371C33v30Ev");}
void  S3371C3 ::v31(){vfunc_called(this, "_ZN7S3371C33v31Ev");}
void  S3371C3 ::v32(){vfunc_called(this, "_ZN7S3371C33v32Ev");}
void  S3371C3 ::v33(){vfunc_called(this, "_ZN7S3371C33v33Ev");}
void  S3371C3 ::v34(){vfunc_called(this, "_ZN7S3371C33v34Ev");}
void  S3371C3 ::v35(){vfunc_called(this, "_ZN7S3371C33v35Ev");}
void  S3371C3 ::v36(){vfunc_called(this, "_ZN7S3371C33v36Ev");}
void  S3371C3 ::v37(){vfunc_called(this, "_ZN7S3371C33v37Ev");}
void  S3371C3 ::v38(){vfunc_called(this, "_ZN7S3371C33v38Ev");}
void  S3371C3 ::v39(){vfunc_called(this, "_ZN7S3371C33v39Ev");}
void  S3371C3 ::v40(){vfunc_called(this, "_ZN7S3371C33v40Ev");}
void  S3371C3 ::v41(){vfunc_called(this, "_ZN7S3371C33v41Ev");}
void  S3371C3 ::v42(){vfunc_called(this, "_ZN7S3371C33v42Ev");}
void  S3371C3 ::v43(){vfunc_called(this, "_ZN7S3371C33v43Ev");}
void  S3371C3 ::v44(){vfunc_called(this, "_ZN7S3371C33v44Ev");}
void  S3371C3 ::v45(){vfunc_called(this, "_ZN7S3371C33v45Ev");}
void  S3371C3 ::v46(){vfunc_called(this, "_ZN7S3371C33v46Ev");}
void  S3371C3 ::v47(){vfunc_called(this, "_ZN7S3371C33v47Ev");}
void  S3371C3 ::v48(){vfunc_called(this, "_ZN7S3371C33v48Ev");}
void  S3371C3 ::v49(){vfunc_called(this, "_ZN7S3371C33v49Ev");}
void  S3371C3 ::v50(){vfunc_called(this, "_ZN7S3371C33v50Ev");}
void  S3371C3 ::v51(){vfunc_called(this, "_ZN7S3371C33v51Ev");}
void  S3371C3 ::v52(){vfunc_called(this, "_ZN7S3371C33v52Ev");}
void  S3371C3 ::v53(){vfunc_called(this, "_ZN7S3371C33v53Ev");}
void  S3371C3 ::v54(){vfunc_called(this, "_ZN7S3371C33v54Ev");}
void  S3371C3 ::v55(){vfunc_called(this, "_ZN7S3371C33v55Ev");}
void  S3371C3 ::v56(){vfunc_called(this, "_ZN7S3371C33v56Ev");}
void  S3371C3 ::v57(){vfunc_called(this, "_ZN7S3371C33v57Ev");}
void  S3371C3 ::v58(){vfunc_called(this, "_ZN7S3371C33v58Ev");}
void  S3371C3 ::v59(){vfunc_called(this, "_ZN7S3371C33v59Ev");}
void  S3371C3 ::v60(){vfunc_called(this, "_ZN7S3371C33v60Ev");}
void  S3371C3 ::v61(){vfunc_called(this, "_ZN7S3371C33v61Ev");}
void  S3371C3 ::v62(){vfunc_called(this, "_ZN7S3371C33v62Ev");}
void  S3371C3 ::v63(){vfunc_called(this, "_ZN7S3371C33v63Ev");}
void  S3371C3 ::v64(){vfunc_called(this, "_ZN7S3371C33v64Ev");}
void  S3371C3 ::v65(){vfunc_called(this, "_ZN7S3371C33v65Ev");}
void  S3371C3 ::v66(){vfunc_called(this, "_ZN7S3371C33v66Ev");}
void  S3371C3 ::v67(){vfunc_called(this, "_ZN7S3371C33v67Ev");}
void  S3371C3 ::v68(){vfunc_called(this, "_ZN7S3371C33v68Ev");}
void  S3371C3 ::v69(){vfunc_called(this, "_ZN7S3371C33v69Ev");}
S3371C3 ::S3371C3(){ note_ctor("S3371C3", this);} // tgen

static void Test_S3371C3()
{
  extern Class_Descriptor cd_S3371C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S3371C3, buf);
    S3371C3 *dp, &lv = *(dp=new (buf) S3371C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S3371C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3371C3)");
    check_field_offset(lv, s3371c3f0, ABISELECT(8,4), "S3371C3.s3371c3f0");
    check_field_offset(lv, s3371c3f1, ABISELECT(16,8), "S3371C3.s3371c3f1");
    check_field_offset(lv, s3371c3f2, ABISELECT(24,16), "S3371C3.s3371c3f2");
    check_field_offset(lv, s3371c3f3, ABISELECT(56,32), "S3371C3.s3371c3f3");
    check_field_offset(lv, s3371c3f4, ABISELECT(64,40), "S3371C3.s3371c3f4");
    check_field_offset(lv, s3371c3f5, ABISELECT(72,44), "S3371C3.s3371c3f5");
    check_field_offset(lv, s3371c3f6, ABISELECT(80,52), "S3371C3.s3371c3f6");
    test_class_info(&lv, &cd_S3371C3);
    dp->~S3371C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3371C3(Test_S3371C3, "S3371C3", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S3371C3C1Ev();
extern void _ZN7S3371C3D1Ev();
Name_Map name_map_S3371C3[] = {
  NSPAIR(_ZN7S3371C3C1Ev),
  NSPAIR(_ZN7S3371C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3371C3[];
extern void _ZN7S3371C3D1Ev();
extern void _ZN7S3371C3D0Ev();
extern void _ZN7S3371C32v6Ev();
extern void _ZN7S3371C32v7Ev();
extern void _ZN7S3371C32v8Ev();
extern void _ZN7S3371C32v9Ev();
extern void _ZN7S3371C33v10Ev();
extern void _ZN7S3371C33v11Ev();
extern void _ZN7S3371C33v12Ev();
extern void _ZN7S3371C33v13Ev();
extern void _ZN7S3371C33v14Ev();
extern void _ZN7S3371C33v15Ev();
extern void _ZN7S3371C33v16Ev();
extern void _ZN7S3371C33v17Ev();
extern void _ZN7S3371C33v18Ev();
extern void _ZN7S3371C33v19Ev();
extern void _ZN7S3371C33v20Ev();
extern void _ZN7S3371C33v21Ev();
extern void _ZN7S3371C33v22Ev();
extern void _ZN7S3371C33v23Ev();
extern void _ZN7S3371C33v24Ev();
extern void _ZN7S3371C33v25Ev();
extern void _ZN7S3371C33v26Ev();
extern void _ZN7S3371C33v27Ev();
extern void _ZN7S3371C33v28Ev();
extern void _ZN7S3371C33v29Ev();
extern void _ZN7S3371C33v30Ev();
extern void _ZN7S3371C33v31Ev();
extern void _ZN7S3371C33v32Ev();
extern void _ZN7S3371C33v33Ev();
extern void _ZN7S3371C33v34Ev();
extern void _ZN7S3371C33v35Ev();
extern void _ZN7S3371C33v36Ev();
extern void _ZN7S3371C33v37Ev();
extern void _ZN7S3371C33v38Ev();
extern void _ZN7S3371C33v39Ev();
extern void _ZN7S3371C33v40Ev();
extern void _ZN7S3371C33v41Ev();
extern void _ZN7S3371C33v42Ev();
extern void _ZN7S3371C33v43Ev();
extern void _ZN7S3371C33v44Ev();
extern void _ZN7S3371C33v45Ev();
extern void _ZN7S3371C33v46Ev();
extern void _ZN7S3371C33v47Ev();
extern void _ZN7S3371C33v48Ev();
extern void _ZN7S3371C33v49Ev();
extern void _ZN7S3371C33v50Ev();
extern void _ZN7S3371C33v51Ev();
extern void _ZN7S3371C33v52Ev();
extern void _ZN7S3371C33v53Ev();
extern void _ZN7S3371C33v54Ev();
extern void _ZN7S3371C33v55Ev();
extern void _ZN7S3371C33v56Ev();
extern void _ZN7S3371C33v57Ev();
extern void _ZN7S3371C33v58Ev();
extern void _ZN7S3371C33v59Ev();
extern void _ZN7S3371C33v60Ev();
extern void _ZN7S3371C33v61Ev();
extern void _ZN7S3371C33v62Ev();
extern void _ZN7S3371C33v63Ev();
extern void _ZN7S3371C33v64Ev();
extern void _ZN7S3371C33v65Ev();
extern void _ZN7S3371C33v66Ev();
extern void _ZN7S3371C33v67Ev();
extern void _ZN7S3371C33v68Ev();
extern void _ZN7S3371C33v69Ev();
static  VTBL_ENTRY vtc_S3371C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3371C3[0]),
  (VTBL_ENTRY)&_ZN7S3371C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3371C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3371C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3371C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3371C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3371C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v69Ev,
};
extern VTBL_ENTRY _ZTI7S3371C3[];
extern  VTBL_ENTRY _ZTV7S3371C3[];
Class_Descriptor cd_S3371C3 = {  "S3371C3", // class name
  0,0,//no base classes
  &(vtc_S3371C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S3371C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3371C3),68, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3371C2  : S3371C3 {
  void *s3371c2f0;
  ::S3432C14_nt s3371c2f1;
  int s3371c2f2[5];
  unsigned int s3371c2f3:1;
  unsigned int s3371c2f4:1;
  unsigned int s3371c2f5:1;
  unsigned int s3371c2f6:1;
  unsigned int s3371c2f7:1;
  ::S273C21 s3371c2f8;
  ::S273C17 s3371c2f9;
  unsigned int s3371c2f10:1;
  int s3371c2f11[2];
  void *s3371c2f12;
  int s3371c2f13[3];
  virtual  ~S3371C2(); // _ZN7S3371C2D1Ev
  virtual void  v70(); // _ZN7S3371C23v70Ev
  virtual void  v71(); // _ZN7S3371C23v71Ev
  virtual void  v72(); // _ZN7S3371C23v72Ev
  virtual void  v73(); // _ZN7S3371C23v73Ev
  virtual void  v74(); // _ZN7S3371C23v74Ev
  virtual void  v75(); // _ZN7S3371C23v75Ev
  virtual void  v76(); // _ZN7S3371C23v76Ev
  virtual void  v77(); // _ZN7S3371C23v77Ev
  virtual void  v78(); // _ZN7S3371C23v78Ev
  virtual void  v79(); // _ZN7S3371C23v79Ev
  virtual void  v80(); // _ZN7S3371C23v80Ev
  virtual void  v81(); // _ZN7S3371C23v81Ev
  virtual void  v82(); // _ZN7S3371C23v82Ev
  S3371C2(); // tgen
};
//SIG(-1 S3371C2) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 v70 v71 v72 v73 v74 v75 v76 v77 Fi FL Fp[4] Fi[2] Fp FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp FC3 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC7{ BC8{ BC6}} Fi:1 Fi[2] Fp Fi[3]}


 S3371C2 ::~S3371C2(){ note_dtor("S3371C2", this);}
void  S3371C2 ::v70(){vfunc_called(this, "_ZN7S3371C23v70Ev");}
void  S3371C2 ::v71(){vfunc_called(this, "_ZN7S3371C23v71Ev");}
void  S3371C2 ::v72(){vfunc_called(this, "_ZN7S3371C23v72Ev");}
void  S3371C2 ::v73(){vfunc_called(this, "_ZN7S3371C23v73Ev");}
void  S3371C2 ::v74(){vfunc_called(this, "_ZN7S3371C23v74Ev");}
void  S3371C2 ::v75(){vfunc_called(this, "_ZN7S3371C23v75Ev");}
void  S3371C2 ::v76(){vfunc_called(this, "_ZN7S3371C23v76Ev");}
void  S3371C2 ::v77(){vfunc_called(this, "_ZN7S3371C23v77Ev");}
void  S3371C2 ::v78(){vfunc_called(this, "_ZN7S3371C23v78Ev");}
void  S3371C2 ::v79(){vfunc_called(this, "_ZN7S3371C23v79Ev");}
void  S3371C2 ::v80(){vfunc_called(this, "_ZN7S3371C23v80Ev");}
void  S3371C2 ::v81(){vfunc_called(this, "_ZN7S3371C23v81Ev");}
void  S3371C2 ::v82(){vfunc_called(this, "_ZN7S3371C23v82Ev");}
S3371C2 ::S3371C2(){ note_ctor("S3371C2", this);} // tgen

static void Test_S3371C2()
{
  extern Class_Descriptor cd_S3371C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S3371C2, buf);
    S3371C2 *dp, &lv = *(dp=new (buf) S3371C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S3371C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3371C2)");
    check_base_class_offset(lv, (S3371C3*), 0, "S3371C2");
    check_field_offset(lv, s3371c2f0, ABISELECT(96,60), "S3371C2.s3371c2f0");
    check_field_offset(lv, s3371c2f1, ABISELECT(104,64), "S3371C2.s3371c2f1");
    check_field_offset(lv, s3371c2f2, ABISELECT(112,72), "S3371C2.s3371c2f2");
    set_bf_and_test(lv, s3371c2f3, ABISELECT(132,92), 0, 1, 1, "S3371C2");
    set_bf_and_test(lv, s3371c2f4, ABISELECT(132,92), 1, 1, 1, "S3371C2");
    set_bf_and_test(lv, s3371c2f5, ABISELECT(132,92), 2, 1, 1, "S3371C2");
    set_bf_and_test(lv, s3371c2f6, ABISELECT(132,92), 3, 1, 1, "S3371C2");
    set_bf_and_test(lv, s3371c2f7, ABISELECT(132,92), 4, 1, 1, "S3371C2");
    check_field_offset(lv, s3371c2f8, ABISELECT(136,96), "S3371C2.s3371c2f8");
    check_field_offset(lv, s3371c2f9, ABISELECT(152,108), "S3371C2.s3371c2f9");
    set_bf_and_test(lv, s3371c2f10, ABISELECT(168,120), 0, 1, 1, "S3371C2");
    check_field_offset(lv, s3371c2f11, ABISELECT(172,124), "S3371C2.s3371c2f11");
    check_field_offset(lv, s3371c2f12, ABISELECT(184,132), "S3371C2.s3371c2f12");
    check_field_offset(lv, s3371c2f13, ABISELECT(192,136), "S3371C2.s3371c2f13");
    test_class_info(&lv, &cd_S3371C2);
    dp->~S3371C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3371C2(Test_S3371C2, "S3371C2", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN7S3371C2C1Ev();
extern void _ZN7S3371C2D1Ev();
Name_Map name_map_S3371C2[] = {
  NSPAIR(_ZN7S3371C2C1Ev),
  NSPAIR(_ZN7S3371C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3371C3;
extern VTBL_ENTRY _ZTI7S3371C3[];
extern  VTBL_ENTRY _ZTV7S3371C3[];
static Base_Class bases_S3371C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3371C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3371C2[];
extern void _ZN7S3371C2D1Ev();
extern void _ZN7S3371C2D0Ev();
extern void _ZN7S3371C32v6Ev();
extern void _ZN7S3371C32v7Ev();
extern void _ZN7S3371C32v8Ev();
extern void _ZN7S3371C32v9Ev();
extern void _ZN7S3371C33v10Ev();
extern void _ZN7S3371C33v11Ev();
extern void _ZN7S3371C33v12Ev();
extern void _ZN7S3371C33v13Ev();
extern void _ZN7S3371C33v14Ev();
extern void _ZN7S3371C33v15Ev();
extern void _ZN7S3371C33v16Ev();
extern void _ZN7S3371C33v17Ev();
extern void _ZN7S3371C33v18Ev();
extern void _ZN7S3371C33v19Ev();
extern void _ZN7S3371C33v20Ev();
extern void _ZN7S3371C33v21Ev();
extern void _ZN7S3371C33v22Ev();
extern void _ZN7S3371C33v23Ev();
extern void _ZN7S3371C33v24Ev();
extern void _ZN7S3371C33v25Ev();
extern void _ZN7S3371C33v26Ev();
extern void _ZN7S3371C33v27Ev();
extern void _ZN7S3371C33v28Ev();
extern void _ZN7S3371C33v29Ev();
extern void _ZN7S3371C33v30Ev();
extern void _ZN7S3371C33v31Ev();
extern void _ZN7S3371C33v32Ev();
extern void _ZN7S3371C33v33Ev();
extern void _ZN7S3371C33v34Ev();
extern void _ZN7S3371C33v35Ev();
extern void _ZN7S3371C33v36Ev();
extern void _ZN7S3371C33v37Ev();
extern void _ZN7S3371C33v38Ev();
extern void _ZN7S3371C33v39Ev();
extern void _ZN7S3371C33v40Ev();
extern void _ZN7S3371C33v41Ev();
extern void _ZN7S3371C33v42Ev();
extern void _ZN7S3371C33v43Ev();
extern void _ZN7S3371C33v44Ev();
extern void _ZN7S3371C33v45Ev();
extern void _ZN7S3371C33v46Ev();
extern void _ZN7S3371C33v47Ev();
extern void _ZN7S3371C33v48Ev();
extern void _ZN7S3371C33v49Ev();
extern void _ZN7S3371C33v50Ev();
extern void _ZN7S3371C33v51Ev();
extern void _ZN7S3371C33v52Ev();
extern void _ZN7S3371C33v53Ev();
extern void _ZN7S3371C33v54Ev();
extern void _ZN7S3371C33v55Ev();
extern void _ZN7S3371C33v56Ev();
extern void _ZN7S3371C33v57Ev();
extern void _ZN7S3371C33v58Ev();
extern void _ZN7S3371C33v59Ev();
extern void _ZN7S3371C33v60Ev();
extern void _ZN7S3371C33v61Ev();
extern void _ZN7S3371C33v62Ev();
extern void _ZN7S3371C33v63Ev();
extern void _ZN7S3371C33v64Ev();
extern void _ZN7S3371C33v65Ev();
extern void _ZN7S3371C33v66Ev();
extern void _ZN7S3371C33v67Ev();
extern void _ZN7S3371C33v68Ev();
extern void _ZN7S3371C33v69Ev();
extern void _ZN7S3371C23v70Ev();
extern void _ZN7S3371C23v71Ev();
extern void _ZN7S3371C23v72Ev();
extern void _ZN7S3371C23v73Ev();
extern void _ZN7S3371C23v74Ev();
extern void _ZN7S3371C23v75Ev();
extern void _ZN7S3371C23v76Ev();
extern void _ZN7S3371C23v77Ev();
extern void _ZN7S3371C23v78Ev();
extern void _ZN7S3371C23v79Ev();
extern void _ZN7S3371C23v80Ev();
extern void _ZN7S3371C23v81Ev();
extern void _ZN7S3371C23v82Ev();
static  VTBL_ENTRY vtc_S3371C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3371C2[0]),
  (VTBL_ENTRY)&_ZN7S3371C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3371C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3371C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3371C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3371C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3371C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v82Ev,
};
extern VTBL_ENTRY _ZTI7S3371C2[];
extern  VTBL_ENTRY _ZTV7S3371C2[];
Class_Descriptor cd_S3371C2 = {  "S3371C2", // class name
  bases_S3371C2, 1,
  &(vtc_S3371C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI7S3371C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3371C2),81, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3371C1  : S3371C2 {
  ::S273C13 s3371c1f0;
  virtual  ~S3371C1(); // _ZN7S3371C1D1Ev
  virtual void  v1(); // _ZN7S3371C12v1Ev
  virtual void  v2(); // _ZN7S3371C12v2Ev
  virtual void  v3(); // _ZN7S3371C12v3Ev
  virtual void  v4(); // _ZN7S3371C12v4Ev
  virtual void  v5(); // _ZN7S3371C12v5Ev
  S3371C1(); // tgen
};
//SIG(1 S3371C1) C1{ BC2{ BC3{ vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26 v27 v28 v29 v30 v31 v32 v33 v34 v35 v36 v37 v38 v39 v40 v41 v42 v43 v44 v45 v46 v47 v48 v49 v50 v51 v52 v53 v54 v55 v56 v57 v58 v59 v60 v61 v62 v63 v64 v65 v66 v67 v68 v69 Fi FL Fp[4] Fi[2] Fp FC4{ m Fi[2]} Fp[2]} vd v70 v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 Fp FC4 Fi[5] Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC8{ BC9{ BC7}} Fi:1 Fi[2] Fp Fi[3]} vd v1 v2 v3 v4 v5 FC10{ BC11{ BC7}}}


 S3371C1 ::~S3371C1(){ note_dtor("S3371C1", this);}
void  S3371C1 ::v1(){vfunc_called(this, "_ZN7S3371C12v1Ev");}
void  S3371C1 ::v2(){vfunc_called(this, "_ZN7S3371C12v2Ev");}
void  S3371C1 ::v3(){vfunc_called(this, "_ZN7S3371C12v3Ev");}
void  S3371C1 ::v4(){vfunc_called(this, "_ZN7S3371C12v4Ev");}
void  S3371C1 ::v5(){vfunc_called(this, "_ZN7S3371C12v5Ev");}
S3371C1 ::S3371C1(){ note_ctor("S3371C1", this);} // tgen

static void Test_S3371C1()
{
  extern Class_Descriptor cd_S3371C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,41)];
    init_test(&cd_S3371C1, buf);
    S3371C1 *dp, &lv = *(dp=new (buf) S3371C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,160), "sizeof(S3371C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3371C1)");
    check_base_class_offset(lv, (S3371C3*)(S3371C2*), 0, "S3371C1");
    check_base_class_offset(lv, (S3371C2*), 0, "S3371C1");
    check_field_offset(lv, s3371c1f0, ABISELECT(208,148), "S3371C1.s3371c1f0");
    test_class_info(&lv, &cd_S3371C1);
    dp->~S3371C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3371C1(Test_S3371C1, "S3371C1", ABISELECT(224,160));

#else // __cplusplus

extern void _ZN7S3371C1C1Ev();
extern void _ZN7S3371C1D1Ev();
Name_Map name_map_S3371C1[] = {
  NSPAIR(_ZN7S3371C1C1Ev),
  NSPAIR(_ZN7S3371C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3371C3;
extern VTBL_ENTRY _ZTI7S3371C3[];
extern  VTBL_ENTRY _ZTV7S3371C3[];
extern Class_Descriptor cd_S3371C2;
extern VTBL_ENTRY _ZTI7S3371C2[];
extern  VTBL_ENTRY _ZTV7S3371C2[];
static Base_Class bases_S3371C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3371C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3371C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3371C1[];
extern void _ZN7S3371C1D1Ev();
extern void _ZN7S3371C1D0Ev();
extern void _ZN7S3371C32v6Ev();
extern void _ZN7S3371C32v7Ev();
extern void _ZN7S3371C32v8Ev();
extern void _ZN7S3371C32v9Ev();
extern void _ZN7S3371C33v10Ev();
extern void _ZN7S3371C33v11Ev();
extern void _ZN7S3371C33v12Ev();
extern void _ZN7S3371C33v13Ev();
extern void _ZN7S3371C33v14Ev();
extern void _ZN7S3371C33v15Ev();
extern void _ZN7S3371C33v16Ev();
extern void _ZN7S3371C33v17Ev();
extern void _ZN7S3371C33v18Ev();
extern void _ZN7S3371C33v19Ev();
extern void _ZN7S3371C33v20Ev();
extern void _ZN7S3371C33v21Ev();
extern void _ZN7S3371C33v22Ev();
extern void _ZN7S3371C33v23Ev();
extern void _ZN7S3371C33v24Ev();
extern void _ZN7S3371C33v25Ev();
extern void _ZN7S3371C33v26Ev();
extern void _ZN7S3371C33v27Ev();
extern void _ZN7S3371C33v28Ev();
extern void _ZN7S3371C33v29Ev();
extern void _ZN7S3371C33v30Ev();
extern void _ZN7S3371C33v31Ev();
extern void _ZN7S3371C33v32Ev();
extern void _ZN7S3371C33v33Ev();
extern void _ZN7S3371C33v34Ev();
extern void _ZN7S3371C33v35Ev();
extern void _ZN7S3371C33v36Ev();
extern void _ZN7S3371C33v37Ev();
extern void _ZN7S3371C33v38Ev();
extern void _ZN7S3371C33v39Ev();
extern void _ZN7S3371C33v40Ev();
extern void _ZN7S3371C33v41Ev();
extern void _ZN7S3371C33v42Ev();
extern void _ZN7S3371C33v43Ev();
extern void _ZN7S3371C33v44Ev();
extern void _ZN7S3371C33v45Ev();
extern void _ZN7S3371C33v46Ev();
extern void _ZN7S3371C33v47Ev();
extern void _ZN7S3371C33v48Ev();
extern void _ZN7S3371C33v49Ev();
extern void _ZN7S3371C33v50Ev();
extern void _ZN7S3371C33v51Ev();
extern void _ZN7S3371C33v52Ev();
extern void _ZN7S3371C33v53Ev();
extern void _ZN7S3371C33v54Ev();
extern void _ZN7S3371C33v55Ev();
extern void _ZN7S3371C33v56Ev();
extern void _ZN7S3371C33v57Ev();
extern void _ZN7S3371C33v58Ev();
extern void _ZN7S3371C33v59Ev();
extern void _ZN7S3371C33v60Ev();
extern void _ZN7S3371C33v61Ev();
extern void _ZN7S3371C33v62Ev();
extern void _ZN7S3371C33v63Ev();
extern void _ZN7S3371C33v64Ev();
extern void _ZN7S3371C33v65Ev();
extern void _ZN7S3371C33v66Ev();
extern void _ZN7S3371C33v67Ev();
extern void _ZN7S3371C33v68Ev();
extern void _ZN7S3371C33v69Ev();
extern void _ZN7S3371C23v70Ev();
extern void _ZN7S3371C23v71Ev();
extern void _ZN7S3371C23v72Ev();
extern void _ZN7S3371C23v73Ev();
extern void _ZN7S3371C23v74Ev();
extern void _ZN7S3371C23v75Ev();
extern void _ZN7S3371C23v76Ev();
extern void _ZN7S3371C23v77Ev();
extern void _ZN7S3371C23v78Ev();
extern void _ZN7S3371C23v79Ev();
extern void _ZN7S3371C23v80Ev();
extern void _ZN7S3371C23v81Ev();
extern void _ZN7S3371C23v82Ev();
extern void _ZN7S3371C12v1Ev();
extern void _ZN7S3371C12v2Ev();
extern void _ZN7S3371C12v3Ev();
extern void _ZN7S3371C12v4Ev();
extern void _ZN7S3371C12v5Ev();
static  VTBL_ENTRY vtc_S3371C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3371C1[0]),
  (VTBL_ENTRY)&_ZN7S3371C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3371C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3371C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3371C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3371C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3371C32v9Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v10Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v11Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v12Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v13Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v22Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v23Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v24Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v25Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v26Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v27Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v28Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v29Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v30Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v31Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v32Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v33Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v34Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v35Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v36Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v37Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v38Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v39Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v40Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v41Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v42Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v43Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v44Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v45Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v46Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v47Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v48Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v49Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v50Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v51Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v52Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v53Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v54Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v55Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v56Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v57Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v58Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v59Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v60Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v61Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v62Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v63Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v64Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v65Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v66Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v67Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v68Ev,
  (VTBL_ENTRY)&_ZN7S3371C33v69Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v70Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v71Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v72Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v73Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v74Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v75Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v76Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v77Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v78Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v79Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v80Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v81Ev,
  (VTBL_ENTRY)&_ZN7S3371C23v82Ev,
  (VTBL_ENTRY)&_ZN7S3371C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3371C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3371C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3371C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3371C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3371C1[];
extern  VTBL_ENTRY _ZTV7S3371C1[];
Class_Descriptor cd_S3371C1 = {  "S3371C1", // class name
  bases_S3371C1, 2,
  &(vtc_S3371C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,160), // object size
  NSPAIRA(_ZTI7S3371C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3371C1),86, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7924C2_nt  {
  ::S5330C25 s7924c2f0;
  ::S5330C21 s7924c2f1;
  char s7924c2f2;
  void  mf7924c2(); // _ZN10S7924C2_nt8mf7924c2Ev
  virtual  ~S7924C2_nt(); // _ZN10S7924C2_ntD1Ev
  S7924C2_nt(); // tgen
};
//SIG(-1 S7924C2_nt) C1{ vd m FC2{ m Fp Fi FC3{ m} FC3} FC4{ m Fp Fi FC5{ m} FC5} Fc}


void  S7924C2_nt ::mf7924c2(){}
 S7924C2_nt ::~S7924C2_nt(){ note_dtor("S7924C2_nt", this);}
S7924C2_nt ::S7924C2_nt(){ note_ctor("S7924C2_nt", this);} // tgen

//skip512 S7924C2_nt

#else // __cplusplus

extern void _ZN10S7924C2_ntC1Ev();
extern void _ZN10S7924C2_ntD1Ev();
Name_Map name_map_S7924C2_nt[] = {
  NSPAIR(_ZN10S7924C2_ntC1Ev),
  NSPAIR(_ZN10S7924C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7924C2_nt[];
extern void _ZN10S7924C2_ntD1Ev();
extern void _ZN10S7924C2_ntD0Ev();
static  VTBL_ENTRY vtc_S7924C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7924C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7924C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7924C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S7924C2_nt[];
VTBL_ENTRY *P__ZTI10S7924C2_nt = _ZTI10S7924C2_nt; 
extern  VTBL_ENTRY _ZTV10S7924C2_nt[];
Class_Descriptor cd_S7924C2_nt = {  "S7924C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7924C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S7924C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7924C2_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7924C9  {
  virtual  ~S7924C9(); // _ZN7S7924C9D1Ev
  virtual void  v2(); // _ZN7S7924C92v2Ev
  S7924C9(); // tgen
};
//SIG(-1 S7924C9) C1{ vd v1}


 S7924C9 ::~S7924C9(){ note_dtor("S7924C9", this);}
void  S7924C9 ::v2(){vfunc_called(this, "_ZN7S7924C92v2Ev");}
S7924C9 ::S7924C9(){ note_ctor("S7924C9", this);} // tgen

static void Test_S7924C9()
{
  extern Class_Descriptor cd_S7924C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7924C9, buf);
    S7924C9 *dp, &lv = *(dp=new (buf) S7924C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7924C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7924C9)");
    test_class_info(&lv, &cd_S7924C9);
    dp->~S7924C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7924C9(Test_S7924C9, "S7924C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7924C9C1Ev();
extern void _ZN7S7924C9D1Ev();
Name_Map name_map_S7924C9[] = {
  NSPAIR(_ZN7S7924C9C1Ev),
  NSPAIR(_ZN7S7924C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7924C9[];
extern void _ZN7S7924C9D1Ev();
extern void _ZN7S7924C9D0Ev();
extern void _ZN7S7924C92v2Ev();
static  VTBL_ENTRY vtc_S7924C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7924C9[0]),
  (VTBL_ENTRY)&_ZN7S7924C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7924C9D0Ev,
  (VTBL_ENTRY)&_ZN7S7924C92v2Ev,
};
extern VTBL_ENTRY _ZTI7S7924C9[];
extern  VTBL_ENTRY _ZTV7S7924C9[];
Class_Descriptor cd_S7924C9 = {  "S7924C9", // class name
  0,0,//no base classes
  &(vtc_S7924C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7924C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7924C9),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7924C11_nt  {
  long s7924c11f0[4];
};
//SIG(-1 S7924C11_nt) C1{ Fl[4]}



//skip512 S7924C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7924C10_nt  {
  ::S7924C11_nt s7924c10f0;
  void  mf7924c10(); // _ZN11S7924C10_nt9mf7924c10Ev
};
//SIG(-1 S7924C10_nt) C1{ m FC2{ Fl[4]}}


void  S7924C10_nt ::mf7924c10(){}

//skip512 S7924C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7924C15_nt  {
  void *s7924c15f0;
  void  mf7924c15(); // _ZN11S7924C15_nt9mf7924c15Ev
};
//SIG(-1 S7924C15_nt) C1{ m Fp}


void  S7924C15_nt ::mf7924c15(){}

//skip512 S7924C15_nt

#else // __cplusplus

Class_Descriptor cd_S7924C15_nt = {  "S7924C15_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(8,4), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7924C16_nt  {
  char s7924c16f0;
  long s7924c16f1[2];
  short s7924c16f2[12];
  char s7924c16f3[5];
  void  mf7924c16(); // _ZN11S7924C16_nt9mf7924c16Ev
};
//SIG(-1 S7924C16_nt) C1{ m Fc Fl[2] Fs[12] Fc[5]}


void  S7924C16_nt ::mf7924c16(){}

//skip512 S7924C16_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7924C1  : S7924C2_nt , S7924C9 {
  ::S7924C10_nt s7924c1f0;
  ::S5330C5_nt s7924c1f1;
  int s7924c1f2;
  void *s7924c1f3[10];
  int s7924c1f4[2];
  __tsi64 s7924c1f5;
  int s7924c1f6;
  ::S7924C15_nt s7924c1f7;
  void *s7924c1f8;
  char s7924c1f9;
  __tsi64 s7924c1f10[2];
  char s7924c1f11[7];
  int s7924c1f12[2];
  ::S7924C16_nt s7924c1f13;
  ::S3432C14_nt s7924c1f14;
  int s7924c1f15[7];
  char s7924c1f16;
  int s7924c1f17[2];
  __tsi64 s7924c1f18;
  int s7924c1f19[2];
  void *s7924c1f20[4];
  virtual  ~S7924C1(); // _ZN7S7924C1D1Ev
  virtual void  v1(); // _ZN7S7924C12v1Ev
  S7924C1(); // tgen
};
//SIG(1 S7924C1) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC4} FC5{ m Fp Fi FC6{ m} FC6} Fc} BC7{ vd v2} vd v1 FC8{ m FC9{ Fl[4]}} FC10{ m Fp Fi FC11{ m} FC12{ m}} Fi Fp[10] Fi[2] FL Fi FC13{ m Fp} Fp Fc FL[2] Fc[7] Fi[2] FC14{ m Fc Fl[2] Fs[12] Fc[5]} FC15{ m Fi[2]} Fi[7] Fc Fi[2] FL Fi[2] Fp[4]}


 S7924C1 ::~S7924C1(){ note_dtor("S7924C1", this);}
void  S7924C1 ::v1(){vfunc_called(this, "_ZN7S7924C12v1Ev");}
S7924C1 ::S7924C1(){ note_ctor("S7924C1", this);} // tgen

static void Test_S7924C1()
{
  extern Class_Descriptor cd_S7924C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(54,75)];
    init_test(&cd_S7924C1, buf);
    S7924C1 *dp, &lv = *(dp=new (buf) S7924C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(424,296), "sizeof(S7924C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7924C1)");
    check_base_class_offset(lv, (S7924C2_nt*), 0, "S7924C1");
    check_base_class_offset(lv, (S7924C9*), ABISELECT(48,32), "S7924C1");
    check_field_offset(lv, s7924c1f0, ABISELECT(56,36), "S7924C1.s7924c1f0");
    check_field_offset(lv, s7924c1f1, ABISELECT(88,52), "S7924C1.s7924c1f1");
    check_field_offset(lv, s7924c1f2, ABISELECT(104,64), "S7924C1.s7924c1f2");
    check_field_offset(lv, s7924c1f3, ABISELECT(112,68), "S7924C1.s7924c1f3");
    check_field_offset(lv, s7924c1f4, ABISELECT(192,108), "S7924C1.s7924c1f4");
    check_field_offset(lv, s7924c1f5, ABISELECT(200,116), "S7924C1.s7924c1f5");
    check_field_offset(lv, s7924c1f6, ABISELECT(208,124), "S7924C1.s7924c1f6");
    check_field_offset(lv, s7924c1f7, ABISELECT(216,128), "S7924C1.s7924c1f7");
    check_field_offset(lv, s7924c1f8, ABISELECT(224,132), "S7924C1.s7924c1f8");
    check_field_offset(lv, s7924c1f9, ABISELECT(232,136), "S7924C1.s7924c1f9");
    check_field_offset(lv, s7924c1f10, ABISELECT(240,140), "S7924C1.s7924c1f10");
    check_field_offset(lv, s7924c1f11, ABISELECT(256,156), "S7924C1.s7924c1f11");
    check_field_offset(lv, s7924c1f12, ABISELECT(264,164), "S7924C1.s7924c1f12");
    check_field_offset(lv, s7924c1f13, ABISELECT(272,172), "S7924C1.s7924c1f13");
    check_field_offset(lv, s7924c1f14, ABISELECT(328,216), "S7924C1.s7924c1f14");
    check_field_offset(lv, s7924c1f15, ABISELECT(336,224), "S7924C1.s7924c1f15");
    check_field_offset(lv, s7924c1f16, ABISELECT(364,252), "S7924C1.s7924c1f16");
    check_field_offset(lv, s7924c1f17, ABISELECT(368,256), "S7924C1.s7924c1f17");
    check_field_offset(lv, s7924c1f18, ABISELECT(376,264), "S7924C1.s7924c1f18");
    check_field_offset(lv, s7924c1f19, ABISELECT(384,272), "S7924C1.s7924c1f19");
    check_field_offset(lv, s7924c1f20, ABISELECT(392,280), "S7924C1.s7924c1f20");
    test_class_info(&lv, &cd_S7924C1);
    dp->~S7924C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7924C1(Test_S7924C1, "S7924C1", ABISELECT(424,296));

#else // __cplusplus

extern void _ZN7S7924C1C1Ev();
extern void _ZN7S7924C1D1Ev();
Name_Map name_map_S7924C1[] = {
  NSPAIR(_ZN7S7924C1C1Ev),
  NSPAIR(_ZN7S7924C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7924C2_nt;
extern VTBL_ENTRY _ZTI10S7924C2_nt[];
extern  VTBL_ENTRY _ZTV10S7924C2_nt[];
extern Class_Descriptor cd_S7924C9;
extern VTBL_ENTRY _ZTI7S7924C9[];
extern  VTBL_ENTRY _ZTV7S7924C9[];
static Base_Class bases_S7924C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7924C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7924C9,    ABISELECT(48,32), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7924C1[];
extern void _ZN7S7924C1D1Ev();
extern void _ZN7S7924C1D0Ev();
extern void _ZN7S7924C12v1Ev();
extern void ABISELECT(_ZThn48_N7S7924C1D1Ev,_ZThn32_N7S7924C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7924C1D0Ev,_ZThn32_N7S7924C1D0Ev)();
extern void _ZN7S7924C92v2Ev();
static  VTBL_ENTRY vtc_S7924C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7924C1[0]),
  (VTBL_ENTRY)&_ZN7S7924C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7924C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7924C12v1Ev,
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7924C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7924C1D1Ev,_ZThn32_N7S7924C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7924C1D0Ev,_ZThn32_N7S7924C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7924C92v2Ev,
};
extern VTBL_ENTRY _ZTI7S7924C1[];
extern  VTBL_ENTRY _ZTV7S7924C1[];
Class_Descriptor cd_S7924C1 = {  "S7924C1", // class name
  bases_S7924C1, 2,
  &(vtc_S7924C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(424,296), // object size
  NSPAIRA(_ZTI7S7924C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7924C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9538C2_nt  {
  virtual  ~S9538C2_nt(); // _ZN10S9538C2_ntD1Ev
  virtual void  v3(); // _ZN10S9538C2_nt2v3Ev
  virtual void  v4(); // _ZN10S9538C2_nt2v4Ev
  S9538C2_nt(); // tgen
};
//SIG(-1 S9538C2_nt) C1{ vd v1 v2}


 S9538C2_nt ::~S9538C2_nt(){ note_dtor("S9538C2_nt", this);}
void  S9538C2_nt ::v3(){vfunc_called(this, "_ZN10S9538C2_nt2v3Ev");}
void  S9538C2_nt ::v4(){vfunc_called(this, "_ZN10S9538C2_nt2v4Ev");}
S9538C2_nt ::S9538C2_nt(){ note_ctor("S9538C2_nt", this);} // tgen

//skip512 S9538C2_nt

#else // __cplusplus

extern void _ZN10S9538C2_ntC1Ev();
extern void _ZN10S9538C2_ntD1Ev();
Name_Map name_map_S9538C2_nt[] = {
  NSPAIR(_ZN10S9538C2_ntC1Ev),
  NSPAIR(_ZN10S9538C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S9538C2_nt[];
extern void _ZN10S9538C2_ntD1Ev();
extern void _ZN10S9538C2_ntD0Ev();
extern void _ZN10S9538C2_nt2v3Ev();
extern void _ZN10S9538C2_nt2v4Ev();
static  VTBL_ENTRY vtc_S9538C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S9538C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S9538C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S9538C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S9538C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9538C2_nt2v4Ev,
};
extern VTBL_ENTRY _ZTI10S9538C2_nt[];
VTBL_ENTRY *P__ZTI10S9538C2_nt = _ZTI10S9538C2_nt; 
extern  VTBL_ENTRY _ZTV10S9538C2_nt[];
Class_Descriptor cd_S9538C2_nt = {  "S9538C2_nt", // class name
  0,0,//no base classes
  &(vtc_S9538C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S9538C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S9538C2_nt),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9538C4  {
  ::S5330C19_nt s9538c4f0;
  int s9538c4f1;
  __tsi64 s9538c4f2;
  int s9538c4f3[2];
  __tsi64 s9538c4f4[2];
  char s9538c4f5[2];
  ::S5330C19_nt s9538c4f6;
  ::S5330C19_nt s9538c4f7;
  ::S5330C19_nt s9538c4f8;
  ::S5330C19_nt s9538c4f9;
  int s9538c4f10[3];
  ::S5330C19_nt s9538c4f11;
  ::S5330C19_nt s9538c4f12;
  ::S5330C19_nt s9538c4f13;
  int s9538c4f14;
  ::S5330C19_nt s9538c4f15;
  void  mf9538c4(); // _ZN7S9538C48mf9538c4Ev
};
//SIG(-1 S9538C4) C1{ m FC2{ m Fp Fi FC3{ m}} Fi FL Fi[2] FL[2] Fc[2] FC2 FC2 FC2 FC2 Fi[3] FC2 FC2 FC2 Fi FC2}


void  S9538C4 ::mf9538c4(){}

static void Test_S9538C4()
{
  {
    init_simple_test("S9538C4");
    S9538C4 lv;
    check2(sizeof(lv), ABISELECT(216,164), "sizeof(S9538C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9538C4)");
    check_field_offset(lv, s9538c4f0, 0, "S9538C4.s9538c4f0");
    check_field_offset(lv, s9538c4f1, ABISELECT(16,12), "S9538C4.s9538c4f1");
    check_field_offset(lv, s9538c4f2, ABISELECT(24,16), "S9538C4.s9538c4f2");
    check_field_offset(lv, s9538c4f3, ABISELECT(32,24), "S9538C4.s9538c4f3");
    check_field_offset(lv, s9538c4f4, ABISELECT(40,32), "S9538C4.s9538c4f4");
    check_field_offset(lv, s9538c4f5, ABISELECT(56,48), "S9538C4.s9538c4f5");
    check_field_offset(lv, s9538c4f6, ABISELECT(64,52), "S9538C4.s9538c4f6");
    check_field_offset(lv, s9538c4f7, ABISELECT(80,64), "S9538C4.s9538c4f7");
    check_field_offset(lv, s9538c4f8, ABISELECT(96,76), "S9538C4.s9538c4f8");
    check_field_offset(lv, s9538c4f9, ABISELECT(112,88), "S9538C4.s9538c4f9");
    check_field_offset(lv, s9538c4f10, ABISELECT(128,100), "S9538C4.s9538c4f10");
    check_field_offset(lv, s9538c4f11, ABISELECT(144,112), "S9538C4.s9538c4f11");
    check_field_offset(lv, s9538c4f12, ABISELECT(160,124), "S9538C4.s9538c4f12");
    check_field_offset(lv, s9538c4f13, ABISELECT(176,136), "S9538C4.s9538c4f13");
    check_field_offset(lv, s9538c4f14, ABISELECT(192,148), "S9538C4.s9538c4f14");
    check_field_offset(lv, s9538c4f15, ABISELECT(200,152), "S9538C4.s9538c4f15");
  }
}
static Arrange_To_Call_Me vS9538C4(Test_S9538C4, "S9538C4", ABISELECT(216,164));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9538C3  {
  ::S9538C4 s9538c3f0;
  ::S5330C19_nt s9538c3f1;
  char s9538c3f2;
  int s9538c3f3[2];
  void  mf9538c3(); // _ZN7S9538C38mf9538c3Ev
};
//SIG(-1 S9538C3) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} Fi FL Fi[2] FL[2] Fc[2] FC3 FC3 FC3 FC3 Fi[3] FC3 FC3 FC3 Fi FC3} FC3 Fc Fi[2]}


void  S9538C3 ::mf9538c3(){}

static void Test_S9538C3()
{
  {
    init_simple_test("S9538C3");
    S9538C3 lv;
    check2(sizeof(lv), ABISELECT(248,188), "sizeof(S9538C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9538C3)");
    check_field_offset(lv, s9538c3f0, 0, "S9538C3.s9538c3f0");
    check_field_offset(lv, s9538c3f1, ABISELECT(216,164), "S9538C3.s9538c3f1");
    check_field_offset(lv, s9538c3f2, ABISELECT(232,176), "S9538C3.s9538c3f2");
    check_field_offset(lv, s9538c3f3, ABISELECT(236,180), "S9538C3.s9538c3f3");
  }
}
static Arrange_To_Call_Me vS9538C3(Test_S9538C3, "S9538C3", ABISELECT(248,188));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9538C13  {
  ::S5330C19_nt s9538c13f0;
  int s9538c13f1;
  ::S5330C19_nt s9538c13f2;
  void  mf9538c13(); // _ZN8S9538C139mf9538c13Ev
};
//SIG(-1 S9538C13) C1{ m FC2{ m Fp Fi FC3{ m}} Fi FC2}


void  S9538C13 ::mf9538c13(){}

static void Test_S9538C13()
{
  {
    init_simple_test("S9538C13");
    S9538C13 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9538C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9538C13)");
    check_field_offset(lv, s9538c13f0, 0, "S9538C13.s9538c13f0");
    check_field_offset(lv, s9538c13f1, ABISELECT(16,12), "S9538C13.s9538c13f1");
    check_field_offset(lv, s9538c13f2, ABISELECT(24,16), "S9538C13.s9538c13f2");
  }
}
static Arrange_To_Call_Me vS9538C13(Test_S9538C13, "S9538C13", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9538C12  {
  __tsi64 s9538c12f0;
  ::S9538C13 s9538c12f1;
  int s9538c12f2;
  void  mf9538c12(); // _ZN8S9538C129mf9538c12Ev
};
//SIG(-1 S9538C12) C1{ m FL FC2{ m FC3{ m Fp Fi FC4{ m}} Fi FC3} Fi}


void  S9538C12 ::mf9538c12(){}

static void Test_S9538C12()
{
  {
    init_simple_test("S9538C12");
    S9538C12 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S9538C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9538C12)");
    check_field_offset(lv, s9538c12f0, 0, "S9538C12.s9538c12f0");
    check_field_offset(lv, s9538c12f1, 8, "S9538C12.s9538c12f1");
    check_field_offset(lv, s9538c12f2, ABISELECT(48,36), "S9538C12.s9538c12f2");
  }
}
static Arrange_To_Call_Me vS9538C12(Test_S9538C12, "S9538C12", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9538C14_nt  {
  void *s9538c14f0;
  int s9538c14f1[2];
  ::S8663C5_nt s9538c14f2;
  void  mf9538c14(); // _ZN11S9538C14_nt9mf9538c14Ev
};
//SIG(-1 S9538C14_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S9538C14_nt ::mf9538c14(){}

//skip512 S9538C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9538C11  {
  ::S9538C12 s9538c11f0;
  ::S9538C14_nt s9538c11f1;
  char s9538c11f2;
  void  mf9538c11(); // _ZN8S9538C119mf9538c11Ev
};
//SIG(-1 S9538C11) C1{ m FC2{ m FL FC3{ m FC4{ m Fp Fi FC5{ m}} Fi FC4} Fi} FC6{ m Fp Fi[2] FC7{ m}} Fc}


void  S9538C11 ::mf9538c11(){}

static void Test_S9538C11()
{
  {
    init_simple_test("S9538C11");
    S9538C11 lv;
    check2(sizeof(lv), ABISELECT(88,60), "sizeof(S9538C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9538C11)");
    check_field_offset(lv, s9538c11f0, 0, "S9538C11.s9538c11f0");
    check_field_offset(lv, s9538c11f1, ABISELECT(56,40), "S9538C11.s9538c11f1");
    check_field_offset(lv, s9538c11f2, ABISELECT(80,56), "S9538C11.s9538c11f2");
  }
}
static Arrange_To_Call_Me vS9538C11(Test_S9538C11, "S9538C11", ABISELECT(88,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9538C1  : S9538C2_nt {
  ::S9538C3 s9538c1f0;
  ::S8663C4_nt s9538c1f1;
  ::S5330C34_nt s9538c1f2;
  ::S9538C11 s9538c1f3;
  ::S9538C11 s9538c1f4;
  char s9538c1f5;
  void *s9538c1f6;
  virtual void  v1(); // _ZN7S9538C12v1Ev
  virtual void  v2(); // _ZN7S9538C12v2Ev
  ~S9538C1(); // tgen
  S9538C1(); // tgen
};
//SIG(1 S9538C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m FC4{ m FC5{ m Fp Fi FC6{ m}} Fi FL Fi[2] FL[2] Fc[2] FC5 FC5 FC5 FC5 Fi[3] FC5 FC5 FC5 Fi FC5} FC5 Fc Fi[2]} FC7{ m Fp Fi[2] FC8{ m}} FC9{ m Fp Fi[2] FC10{ m}} FC11{ m FC12{ m FL FC13{ m FC5 Fi FC5} Fi} FC14{ m Fp Fi[2] FC8} Fc} FC11 Fc Fp}


void  S9538C1 ::v1(){vfunc_called(this, "_ZN7S9538C12v1Ev");}
void  S9538C1 ::v2(){vfunc_called(this, "_ZN7S9538C12v2Ev");}
S9538C1 ::~S9538C1(){ note_dtor("S9538C1", this);} // tgen
S9538C1 ::S9538C1(){ note_ctor("S9538C1", this);} // tgen

static void Test_S9538C1()
{
  extern Class_Descriptor cd_S9538C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(63,89)];
    init_test(&cd_S9538C1, buf);
    S9538C1 *dp, &lv = *(dp=new (buf) S9538C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,352), "sizeof(S9538C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9538C1)");
    check_base_class_offset(lv, (S9538C2_nt*), 0, "S9538C1");
    check_field_offset(lv, s9538c1f0, ABISELECT(8,4), "S9538C1.s9538c1f0");
    check_field_offset(lv, s9538c1f1, ABISELECT(256,192), "S9538C1.s9538c1f1");
    check_field_offset(lv, s9538c1f2, ABISELECT(280,208), "S9538C1.s9538c1f2");
    check_field_offset(lv, s9538c1f3, ABISELECT(304,224), "S9538C1.s9538c1f3");
    check_field_offset(lv, s9538c1f4, ABISELECT(392,284), "S9538C1.s9538c1f4");
    check_field_offset(lv, s9538c1f5, ABISELECT(480,344), "S9538C1.s9538c1f5");
    check_field_offset(lv, s9538c1f6, ABISELECT(488,348), "S9538C1.s9538c1f6");
    test_class_info(&lv, &cd_S9538C1);
    dp->~S9538C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9538C1(Test_S9538C1, "S9538C1", ABISELECT(496,352));

#else // __cplusplus

extern void _ZN7S9538C1C1Ev();
extern void _ZN7S9538C1D1Ev();
Name_Map name_map_S9538C1[] = {
  NSPAIR(_ZN7S9538C1C1Ev),
  NSPAIR(_ZN7S9538C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9538C2_nt;
extern VTBL_ENTRY _ZTI10S9538C2_nt[];
extern  VTBL_ENTRY _ZTV10S9538C2_nt[];
static Base_Class bases_S9538C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9538C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9538C1[];
extern void _ZN7S9538C1D1Ev();
extern void _ZN7S9538C1D0Ev();
extern void _ZN10S9538C2_nt2v3Ev();
extern void _ZN10S9538C2_nt2v4Ev();
extern void _ZN7S9538C12v1Ev();
extern void _ZN7S9538C12v2Ev();
static  VTBL_ENTRY vtc_S9538C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9538C1[0]),
  (VTBL_ENTRY)&_ZN7S9538C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9538C1D0Ev,
  (VTBL_ENTRY)&_ZN10S9538C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S9538C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN7S9538C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9538C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9538C1[];
extern  VTBL_ENTRY _ZTV7S9538C1[];
Class_Descriptor cd_S9538C1 = {  "S9538C1", // class name
  bases_S9538C1, 1,
  &(vtc_S9538C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(496,352), // object size
  NSPAIRA(_ZTI7S9538C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9538C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4758C3_nt  {
  ::S5330C19_nt s4758c3f0;
  int s4758c3f1[2];
  char s4758c3f2;
  virtual  ~S4758C3_nt(); // _ZN10S4758C3_ntD1Ev
  virtual void  v3(); // _ZN10S4758C3_nt2v3Ev
  virtual void  v4(); // _ZN10S4758C3_nt2v4Ev
  virtual void  v5(); // _ZN10S4758C3_nt2v5Ev
  S4758C3_nt(); // tgen
};
//SIG(-1 S4758C3_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4758C3_nt ::~S4758C3_nt(){ note_dtor("S4758C3_nt", this);}
void  S4758C3_nt ::v3(){vfunc_called(this, "_ZN10S4758C3_nt2v3Ev");}
void  S4758C3_nt ::v4(){vfunc_called(this, "_ZN10S4758C3_nt2v4Ev");}
void  S4758C3_nt ::v5(){vfunc_called(this, "_ZN10S4758C3_nt2v5Ev");}
S4758C3_nt ::S4758C3_nt(){ note_ctor("S4758C3_nt", this);} // tgen

//skip512 S4758C3_nt

#else // __cplusplus

extern void _ZN10S4758C3_ntC1Ev();
extern void _ZN10S4758C3_ntD1Ev();
Name_Map name_map_S4758C3_nt[] = {
  NSPAIR(_ZN10S4758C3_ntC1Ev),
  NSPAIR(_ZN10S4758C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4758C3_nt[];
extern void _ZN10S4758C3_ntD1Ev();
extern void _ZN10S4758C3_ntD0Ev();
extern void _ZN10S4758C3_nt2v3Ev();
extern void _ZN10S4758C3_nt2v4Ev();
extern void _ZN10S4758C3_nt2v5Ev();
static  VTBL_ENTRY vtc_S4758C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4758C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4758C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4758C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4758C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4758C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4758C3_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S4758C3_nt[];
VTBL_ENTRY *P__ZTI10S4758C3_nt = _ZTI10S4758C3_nt; 
extern  VTBL_ENTRY _ZTV10S4758C3_nt[];
Class_Descriptor cd_S4758C3_nt = {  "S4758C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4758C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S4758C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4758C3_nt),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4758C2_nt  : S4758C3_nt {
  void *s4758c2f0;
  virtual void  v6(); // _ZN10S4758C2_nt2v6Ev
  virtual void  v7(); // _ZN10S4758C2_nt2v7Ev
  ~S4758C2_nt(); // tgen
  S4758C2_nt(); // tgen
};
//SIG(-1 S4758C2_nt) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4758C2_nt ::v6(){vfunc_called(this, "_ZN10S4758C2_nt2v6Ev");}
void  S4758C2_nt ::v7(){vfunc_called(this, "_ZN10S4758C2_nt2v7Ev");}
S4758C2_nt ::~S4758C2_nt(){ note_dtor("S4758C2_nt", this);} // tgen
S4758C2_nt ::S4758C2_nt(){ note_ctor("S4758C2_nt", this);} // tgen

//skip512 S4758C2_nt

#else // __cplusplus

extern void _ZN10S4758C2_ntC1Ev();
extern void _ZN10S4758C2_ntD1Ev();
Name_Map name_map_S4758C2_nt[] = {
  NSPAIR(_ZN10S4758C2_ntC1Ev),
  NSPAIR(_ZN10S4758C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4758C3_nt;
extern VTBL_ENTRY _ZTI10S4758C3_nt[];
extern  VTBL_ENTRY _ZTV10S4758C3_nt[];
static Base_Class bases_S4758C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4758C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4758C2_nt[];
extern void _ZN10S4758C2_ntD1Ev();
extern void _ZN10S4758C2_ntD0Ev();
extern void _ZN10S4758C3_nt2v3Ev();
extern void _ZN10S4758C3_nt2v4Ev();
extern void _ZN10S4758C3_nt2v5Ev();
extern void _ZN10S4758C2_nt2v6Ev();
extern void _ZN10S4758C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S4758C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4758C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4758C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4758C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4758C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4758C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4758C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4758C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4758C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S4758C2_nt[];
VTBL_ENTRY *P__ZTI10S4758C2_nt = _ZTI10S4758C2_nt; 
extern  VTBL_ENTRY _ZTV10S4758C2_nt[];
Class_Descriptor cd_S4758C2_nt = {  "S4758C2_nt", // class name
  bases_S4758C2_nt, 1,
  &(vtc_S4758C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI10S4758C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4758C2_nt),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4758C7_nt  {
  char s4758c7f0[20];
};
//SIG(-1 S4758C7_nt) C1{ Fc[20]}



//skip512 S4758C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4758C6_nt  {
  ::S4758C7_nt s4758c6f0;
  char s4758c6f1[16];
};
//SIG(-1 S4758C6_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S4758C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4758C10_nt  {
  char s4758c10f0[52];
};
//SIG(-1 S4758C10_nt) C1{ Fc[52]}



//skip512 S4758C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4758C11_nt  {
  char s4758c11f0[128];
};
//SIG(-1 S4758C11_nt) C1{ Fc[128]}



//skip512 S4758C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4758C9_nt  {
  ::S4758C6_nt s4758c9f0;
  ::S4758C10_nt s4758c9f1;
  ::S4758C11_nt s4758c9f2;
};
//SIG(-1 S4758C9_nt) C1{ FC2{ FC3{ Fc[20]} Fc[16]} FC4{ Fc[52]} FC5{ Fc[128]}}



//skip512 S4758C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4758C13_nt  {
  int s4758c13f0[3];
  char s4758c13f1[4];
};
//SIG(-1 S4758C13_nt) C1{ Fi[3] Fc[4]}



//skip512 S4758C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4758C14_nt  {
  char s4758c14f0[64];
};
//SIG(-1 S4758C14_nt) C1{ Fc[64]}



//skip512 S4758C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4758C16_nt  {
  int s4758c16f0;
  int s4758c16f1;
};
//SIG(1 S4758C16_nt) C1{ Fi[2]}



//skip512 S4758C16_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4758C17_nt  {
  int s4758c17f0;
  int s4758c17f1;
  int s4758c17f2;
  char s4758c17f3[128];
};
//SIG(1 S4758C17_nt) C1{ Fi[3] Fc[128]}



//skip512 S4758C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S4758C15_nt  {
  ::S4758C16_nt s4758c15f0;
  __tsi64 s4758c15f1;
  ::S4758C17_nt s4758c15f2;
};
//SIG(1 S4758C15_nt) U1{ FC2{ Fi Fi} FL FC3{ Fi Fi Fi Fc[128]}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S4758C8_nt  {
  ::S4758C9_nt s4758c8f0;
  ::S3432C12_nt s4758c8f1;
  ::S4758C13_nt s4758c8f2;
  int s4758c8f3;
  ::S4758C14_nt s4758c8f4;
  ::S4758C15_nt s4758c8f5;
  int s4758c8f6;
};
//SIG(-1 S4758C8_nt) C1{ FC2{ FC3{ FC4{ Fc[20]} Fc[16]} FC5{ Fc[52]} FC6{ Fc[128]}} FC7{ Fc[4]} FC8{ Fi[3] Fc[4]} Fi FC9{ Fc[64]} FU10{ FC11{ Fi Fi} FL FC12{ Fi Fi Fi Fc[128]}} Fi}



//skip512 S4758C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4758C1  : S4758C2_nt {
  ::S4758C6_nt s4758c1f0;
  ::S4758C6_nt s4758c1f1;
  ::S4758C8_nt s4758c1f2;
  int s4758c1f3;
  int s4758c1f4;
  ::S7924C10_nt s4758c1f5;
  virtual  ~S4758C1(); // _ZN7S4758C1D1Ev
  virtual void  v1(); // _ZN7S4758C12v1Ev
  virtual void  v2(); // _ZN7S4758C12v2Ev
  S4758C1(); // tgen
};
//SIG(1 S4758C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ FC7{ Fc[20]} Fc[16]} FC6 FC8{ FC9{ FC6 FC10{ Fc[52]} FC11{ Fc[128]}} FC12{ Fc[4]} FC13{ Fi[3] Fc[4]} Fi FC14{ Fc[64]} FU15{ FC16{ Fi Fi} FL FC17{ Fi Fi Fi Fc[128]}} Fi} Fi Fi FC18{ m FC19{ Fl[4]}}}


 S4758C1 ::~S4758C1(){ note_dtor("S4758C1", this);}
void  S4758C1 ::v1(){vfunc_called(this, "_ZN7S4758C12v1Ev");}
void  S4758C1 ::v2(){vfunc_called(this, "_ZN7S4758C12v2Ev");}
S4758C1 ::S4758C1(){ note_ctor("S4758C1", this);} // tgen

static void Test_S4758C1()
{
  extern Class_Descriptor cd_S4758C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(78,145)];
    init_test(&cd_S4758C1, buf);
    S4758C1 *dp, &lv = *(dp=new (buf) S4758C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(616,576), "sizeof(S4758C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4758C1)");
    check_base_class_offset(lv, (S4758C3_nt*)(S4758C2_nt*), 0, "S4758C1");
    check_base_class_offset(lv, (S4758C2_nt*), 0, "S4758C1");
    check_field_offset(lv, s4758c1f0, ABISELECT(48,32), "S4758C1.s4758c1f0");
    check_field_offset(lv, s4758c1f1, ABISELECT(84,68), "S4758C1.s4758c1f1");
    check_field_offset(lv, s4758c1f2, ABISELECT(120,104), "S4758C1.s4758c1f2");
    check_field_offset(lv, s4758c1f3, ABISELECT(576,552), "S4758C1.s4758c1f3");
    check_field_offset(lv, s4758c1f4, ABISELECT(580,556), "S4758C1.s4758c1f4");
    check_field_offset(lv, s4758c1f5, ABISELECT(584,560), "S4758C1.s4758c1f5");
    test_class_info(&lv, &cd_S4758C1);
    dp->~S4758C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4758C1(Test_S4758C1, "S4758C1", ABISELECT(616,576));

#else // __cplusplus

extern void _ZN7S4758C1C1Ev();
extern void _ZN7S4758C1D1Ev();
Name_Map name_map_S4758C1[] = {
  NSPAIR(_ZN7S4758C1C1Ev),
  NSPAIR(_ZN7S4758C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4758C3_nt;
extern VTBL_ENTRY _ZTI10S4758C3_nt[];
extern  VTBL_ENTRY _ZTV10S4758C3_nt[];
extern Class_Descriptor cd_S4758C2_nt;
extern VTBL_ENTRY _ZTI10S4758C2_nt[];
extern  VTBL_ENTRY _ZTV10S4758C2_nt[];
static Base_Class bases_S4758C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4758C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4758C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4758C1[];
extern void _ZN7S4758C1D1Ev();
extern void _ZN7S4758C1D0Ev();
extern void _ZN10S4758C3_nt2v3Ev();
extern void _ZN10S4758C3_nt2v4Ev();
extern void _ZN10S4758C3_nt2v5Ev();
extern void _ZN10S4758C2_nt2v6Ev();
extern void _ZN10S4758C2_nt2v7Ev();
extern void _ZN7S4758C12v1Ev();
extern void _ZN7S4758C12v2Ev();
static  VTBL_ENTRY vtc_S4758C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4758C1[0]),
  (VTBL_ENTRY)&_ZN7S4758C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4758C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4758C3_nt2v3Ev,
  (VTBL_ENTRY)&_ZN10S4758C3_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4758C3_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4758C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4758C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S4758C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4758C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4758C1[];
extern  VTBL_ENTRY _ZTV7S4758C1[];
Class_Descriptor cd_S4758C1 = {  "S4758C1", // class name
  bases_S4758C1, 2,
  &(vtc_S4758C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(616,576), // object size
  NSPAIRA(_ZTI7S4758C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4758C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12844C3_nt  {
  int s12844c3f0;
  int s12844c3f1;
  int s12844c3f2;
};
//SIG(1 S12844C3_nt) C1{ Fi[3]}



//skip512 S12844C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12844C6  {
  int s12844c6f0;
  int s12844c6f1;
  int s12844c6f2;
};
//SIG(1 S12844C6) C1{ Fi[3]}



static void Test_S12844C6()
{
  {
    init_simple_test("S12844C6");
    S12844C6 lv;
    check2(sizeof(lv), 12, "sizeof(S12844C6)");
    check2(__alignof__(lv), 4, "__alignof__(S12844C6)");
    check_field_offset(lv, s12844c6f0, 0, "S12844C6.s12844c6f0");
    check_field_offset(lv, s12844c6f1, 4, "S12844C6.s12844c6f1");
    check_field_offset(lv, s12844c6f2, 8, "S12844C6.s12844c6f2");
  }
}
static Arrange_To_Call_Me vS12844C6(Test_S12844C6, "S12844C6", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12844C7  {
  int s12844c7f0;
  int s12844c7f1;
  int s12844c7f2;
  int s12844c7f3;
  int s12844c7f4;
  int s12844c7f5;
  int s12844c7f6;
  char s12844c7f7[32];
};
//SIG(1 S12844C7) C1{ Fi[7] Fc[32]}



static void Test_S12844C7()
{
  {
    init_simple_test("S12844C7");
    S12844C7 lv;
    check2(sizeof(lv), 60, "sizeof(S12844C7)");
    check2(__alignof__(lv), 4, "__alignof__(S12844C7)");
    check_field_offset(lv, s12844c7f0, 0, "S12844C7.s12844c7f0");
    check_field_offset(lv, s12844c7f1, 4, "S12844C7.s12844c7f1");
    check_field_offset(lv, s12844c7f2, 8, "S12844C7.s12844c7f2");
    check_field_offset(lv, s12844c7f3, 12, "S12844C7.s12844c7f3");
    check_field_offset(lv, s12844c7f4, 16, "S12844C7.s12844c7f4");
    check_field_offset(lv, s12844c7f5, 20, "S12844C7.s12844c7f5");
    check_field_offset(lv, s12844c7f6, 24, "S12844C7.s12844c7f6");
    check_field_offset(lv, s12844c7f7, 28, "S12844C7.s12844c7f7");
  }
}
static Arrange_To_Call_Me vS12844C7(Test_S12844C7, "S12844C7", 60);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12844C9_nt  {
  int s12844c9f0;
  int s12844c9f1;
};
//SIG(1 S12844C9_nt) C1{ Fi[2]}



//skip512 S12844C9_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12844C12  {
  int s12844c12f0;
  int s12844c12f1;
  int s12844c12f2;
};
//SIG(1 S12844C12) C1{ Fi[3]}



static void Test_S12844C12()
{
  {
    init_simple_test("S12844C12");
    S12844C12 lv;
    check2(sizeof(lv), 12, "sizeof(S12844C12)");
    check2(__alignof__(lv), 4, "__alignof__(S12844C12)");
    check_field_offset(lv, s12844c12f0, 0, "S12844C12.s12844c12f0");
    check_field_offset(lv, s12844c12f1, 4, "S12844C12.s12844c12f1");
    check_field_offset(lv, s12844c12f2, 8, "S12844C12.s12844c12f2");
  }
}
static Arrange_To_Call_Me vS12844C12(Test_S12844C12, "S12844C12", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12844C15_nt  {
  int s12844c15f0;
};
//SIG(-1 S12844C15_nt) C1{ Fi}



//skip512 S12844C15_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12844C17_nt  {
  int s12844c17f0;
  char s12844c17f1[32];
};
//SIG(1 S12844C17_nt) C1{ Fi Fc[32]}



//skip512 S12844C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S12844C2  {
  char s12844c2f0[60];
  ::S12844C3_nt s12844c2f1;
  ::S12844C3_nt s12844c2f2;
  ::S4758C16_nt s12844c2f3;
  ::S12844C6 s12844c2f4;
  ::S12844C7 s12844c2f5;
  ::S12844C7 s12844c2f6;
  ::S12844C9_nt s12844c2f7;
  ::S12844C6 s12844c2f8;
  ::S8715C26_nt s12844c2f9;
  ::S12844C12 s12844c2f10;
  ::S12844C9_nt s12844c2f11;
  ::S8715C5_nt s12844c2f12;
  ::S12844C15_nt s12844c2f13;
  ::S12844C12 s12844c2f14;
  ::S12844C17_nt s12844c2f15;
};
//SIG(1 S12844C2) U1{ Fc[60] FC2{ Fi Fi Fi} FC2 FC3{ Fi Fi} FC4{ Fi Fi Fi} FC5{ Fi Fi Fi Fi Fi Fi Fi Fc[32]} FC5 FC6{ Fi Fi} FC4 FC7{ Fi Fi Fi Fi} FC8{ Fi Fi Fi} FC6 FC9{ Fi} FC10{ Fi} FC8 FC11{ Fi Fc[32]}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12844C1  {
  int s12844c1f0;
  ::S12844C2 s12844c1f1;
};
//SIG(1 S12844C1) C1{ Fi FU2{ Fc[60] FC3{ Fi Fi Fi} FC3 FC4{ Fi Fi} FC5{ Fi Fi Fi} FC6{ Fi Fi Fi Fi Fi Fi Fi Fc[32]} FC6 FC7{ Fi Fi} FC5 FC8{ Fi Fi Fi Fi} FC9{ Fi Fi Fi} FC7 FC10{ Fi} FC11{ Fi} FC9 FC12{ Fi Fc[32]}}}



static void Test_S12844C1()
{
  {
    init_simple_test("S12844C1");
    S12844C1 lv;
    check2(sizeof(lv), 64, "sizeof(S12844C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12844C1)");
    check_field_offset(lv, s12844c1f0, 0, "S12844C1.s12844c1f0");
    check_field_offset(lv, s12844c1f1, 4, "S12844C1.s12844c1f1");
  }
}
static Arrange_To_Call_Me vS12844C1(Test_S12844C1, "S12844C1", 64);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4055C3_nt  {
  void  mf4055c3(); // _ZN10S4055C3_nt8mf4055c3Ev
  virtual  ~S4055C3_nt(); // _ZN10S4055C3_ntD1Ev
  S4055C3_nt(); // tgen
};
//SIG(-1 S4055C3_nt) C1{ vd m}


void  S4055C3_nt ::mf4055c3(){}
 S4055C3_nt ::~S4055C3_nt(){ note_dtor("S4055C3_nt", this);}
S4055C3_nt ::S4055C3_nt(){ note_ctor("S4055C3_nt", this);} // tgen

//skip512 S4055C3_nt

#else // __cplusplus

extern void _ZN10S4055C3_ntC1Ev();
extern void _ZN10S4055C3_ntD1Ev();
Name_Map name_map_S4055C3_nt[] = {
  NSPAIR(_ZN10S4055C3_ntC1Ev),
  NSPAIR(_ZN10S4055C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern void _ZN10S4055C3_ntD1Ev();
extern void _ZN10S4055C3_ntD0Ev();
static  VTBL_ENTRY vtc_S4055C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4055C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S4055C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4055C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
VTBL_ENTRY *P__ZTI10S4055C3_nt = _ZTI10S4055C3_nt; 
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
Class_Descriptor cd_S4055C3_nt = {  "S4055C3_nt", // class name
  0,0,//no base classes
  &(vtc_S4055C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4055C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4055C3_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4055C2_nt  : S4055C3_nt {
  short s4055c2f0[2];
  virtual  ~S4055C2_nt(); // _ZN10S4055C2_ntD1Ev
  virtual void  v12(); // _ZN10S4055C2_nt3v12Ev
  S4055C2_nt(); // tgen
};
//SIG(-1 S4055C2_nt) C1{ BC2{ vd m} vd v1 Fs[2]}


 S4055C2_nt ::~S4055C2_nt(){ note_dtor("S4055C2_nt", this);}
void  S4055C2_nt ::v12(){vfunc_called(this, "_ZN10S4055C2_nt3v12Ev");}
S4055C2_nt ::S4055C2_nt(){ note_ctor("S4055C2_nt", this);} // tgen

//skip512 S4055C2_nt

#else // __cplusplus

extern void _ZN10S4055C2_ntC1Ev();
extern void _ZN10S4055C2_ntD1Ev();
Name_Map name_map_S4055C2_nt[] = {
  NSPAIR(_ZN10S4055C2_ntC1Ev),
  NSPAIR(_ZN10S4055C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S4055C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4055C2_nt[];
extern void _ZN10S4055C2_ntD1Ev();
extern void _ZN10S4055C2_ntD0Ev();
extern void _ZN10S4055C2_nt3v12Ev();
static  VTBL_ENTRY vtc_S4055C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4055C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4055C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4055C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4055C2_nt3v12Ev,
};
extern VTBL_ENTRY _ZTI10S4055C2_nt[];
VTBL_ENTRY *P__ZTI10S4055C2_nt = _ZTI10S4055C2_nt; 
extern  VTBL_ENTRY _ZTV10S4055C2_nt[];
Class_Descriptor cd_S4055C2_nt = {  "S4055C2_nt", // class name
  bases_S4055C2_nt, 1,
  &(vtc_S4055C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S4055C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4055C2_nt),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4055C5  : S273C11_nt {
  int s4055c5f0[6];
};
//SIG(-1 S4055C5) C1{ BC2{ m Fp Fi[2]} Fi[6]}



static void Test_S4055C5()
{
  extern Class_Descriptor cd_S4055C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,10)];
    init_test(&cd_S4055C5, buf);
    S4055C5 &lv = *(new (buf) S4055C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S4055C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4055C5)");
    check_base_class_offset(lv, (S273C11_nt*), 0, "S4055C5");
    check_field_offset(lv, s4055c5f0, ABISELECT(16,12), "S4055C5.s4055c5f0");
    test_class_info(&lv, &cd_S4055C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4055C5(Test_S4055C5, "S4055C5", ABISELECT(40,36));

#else // __cplusplus

extern Class_Descriptor cd_S273C11_nt;
static Base_Class bases_S4055C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S273C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S4055C5 = {  "S4055C5", // class name
  bases_S4055C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,36), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4055C4  {
  void *s4055c4f0;
  ::S4055C5 s4055c4f1;
  ::S4055C5 s4055c4f2;
  virtual  ~S4055C4(); // _ZN7S4055C4D1Ev
  virtual void  v13(); // _ZN7S4055C43v13Ev
  virtual void  v14(); // _ZN7S4055C43v14Ev
  S4055C4(); // tgen
};
//SIG(-1 S4055C4) C1{ vd v1 v2 Fp FC2{ BC3{ m Fp Fi[2]} Fi[6]} FC2}


 S4055C4 ::~S4055C4(){ note_dtor("S4055C4", this);}
void  S4055C4 ::v13(){vfunc_called(this, "_ZN7S4055C43v13Ev");}
void  S4055C4 ::v14(){vfunc_called(this, "_ZN7S4055C43v14Ev");}
S4055C4 ::S4055C4(){ note_ctor("S4055C4", this);} // tgen

static void Test_S4055C4()
{
  extern Class_Descriptor cd_S4055C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,21)];
    init_test(&cd_S4055C4, buf);
    S4055C4 *dp, &lv = *(dp=new (buf) S4055C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,80), "sizeof(S4055C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4055C4)");
    check_field_offset(lv, s4055c4f0, ABISELECT(8,4), "S4055C4.s4055c4f0");
    check_field_offset(lv, s4055c4f1, ABISELECT(16,8), "S4055C4.s4055c4f1");
    check_field_offset(lv, s4055c4f2, ABISELECT(56,44), "S4055C4.s4055c4f2");
    test_class_info(&lv, &cd_S4055C4);
    dp->~S4055C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4055C4(Test_S4055C4, "S4055C4", ABISELECT(96,80));

#else // __cplusplus

extern void _ZN7S4055C4C1Ev();
extern void _ZN7S4055C4D1Ev();
Name_Map name_map_S4055C4[] = {
  NSPAIR(_ZN7S4055C4C1Ev),
  NSPAIR(_ZN7S4055C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4055C4[];
extern void _ZN7S4055C4D1Ev();
extern void _ZN7S4055C4D0Ev();
extern void _ZN7S4055C43v13Ev();
extern void _ZN7S4055C43v14Ev();
static  VTBL_ENTRY vtc_S4055C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4055C4[0]),
  (VTBL_ENTRY)&_ZN7S4055C4D1Ev,
  (VTBL_ENTRY)&_ZN7S4055C4D0Ev,
  (VTBL_ENTRY)&_ZN7S4055C43v13Ev,
  (VTBL_ENTRY)&_ZN7S4055C43v14Ev,
};
extern VTBL_ENTRY _ZTI7S4055C4[];
extern  VTBL_ENTRY _ZTV7S4055C4[];
Class_Descriptor cd_S4055C4 = {  "S4055C4", // class name
  0,0,//no base classes
  &(vtc_S4055C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,80), // object size
  NSPAIRA(_ZTI7S4055C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4055C4),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4055C7  {
  virtual  ~S4055C7(); // _ZN7S4055C7D1Ev
  virtual void  v15(); // _ZN7S4055C73v15Ev
  S4055C7(); // tgen
};
//SIG(-1 S4055C7) C1{ vd v1}


 S4055C7 ::~S4055C7(){ note_dtor("S4055C7", this);}
void  S4055C7 ::v15(){vfunc_called(this, "_ZN7S4055C73v15Ev");}
S4055C7 ::S4055C7(){ note_ctor("S4055C7", this);} // tgen

static void Test_S4055C7()
{
  extern Class_Descriptor cd_S4055C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4055C7, buf);
    S4055C7 *dp, &lv = *(dp=new (buf) S4055C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4055C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4055C7)");
    test_class_info(&lv, &cd_S4055C7);
    dp->~S4055C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4055C7(Test_S4055C7, "S4055C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4055C7C1Ev();
extern void _ZN7S4055C7D1Ev();
Name_Map name_map_S4055C7[] = {
  NSPAIR(_ZN7S4055C7C1Ev),
  NSPAIR(_ZN7S4055C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4055C7[];
extern void _ZN7S4055C7D1Ev();
extern void _ZN7S4055C7D0Ev();
extern void _ZN7S4055C73v15Ev();
static  VTBL_ENTRY vtc_S4055C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4055C7[0]),
  (VTBL_ENTRY)&_ZN7S4055C7D1Ev,
  (VTBL_ENTRY)&_ZN7S4055C7D0Ev,
  (VTBL_ENTRY)&_ZN7S4055C73v15Ev,
};
extern VTBL_ENTRY _ZTI7S4055C7[];
extern  VTBL_ENTRY _ZTV7S4055C7[];
Class_Descriptor cd_S4055C7 = {  "S4055C7", // class name
  0,0,//no base classes
  &(vtc_S4055C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4055C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4055C7),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4055C8_nt  {
  virtual  ~S4055C8_nt(); // _ZN10S4055C8_ntD1Ev
  virtual void  v16(); // _ZN10S4055C8_nt3v16Ev
  virtual void  v17(); // _ZN10S4055C8_nt3v17Ev
  virtual void  v18(); // _ZN10S4055C8_nt3v18Ev
  virtual void  v19(); // _ZN10S4055C8_nt3v19Ev
  S4055C8_nt(); // tgen
};
//SIG(-1 S4055C8_nt) C1{ vd v1 v2 v3 v4}


 S4055C8_nt ::~S4055C8_nt(){ note_dtor("S4055C8_nt", this);}
void  S4055C8_nt ::v16(){vfunc_called(this, "_ZN10S4055C8_nt3v16Ev");}
void  S4055C8_nt ::v17(){vfunc_called(this, "_ZN10S4055C8_nt3v17Ev");}
void  S4055C8_nt ::v18(){vfunc_called(this, "_ZN10S4055C8_nt3v18Ev");}
void  S4055C8_nt ::v19(){vfunc_called(this, "_ZN10S4055C8_nt3v19Ev");}
S4055C8_nt ::S4055C8_nt(){ note_ctor("S4055C8_nt", this);} // tgen

//skip512 S4055C8_nt

#else // __cplusplus

extern void _ZN10S4055C8_ntC1Ev();
extern void _ZN10S4055C8_ntD1Ev();
Name_Map name_map_S4055C8_nt[] = {
  NSPAIR(_ZN10S4055C8_ntC1Ev),
  NSPAIR(_ZN10S4055C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S4055C8_nt[];
extern void _ZN10S4055C8_ntD1Ev();
extern void _ZN10S4055C8_ntD0Ev();
extern void _ZN10S4055C8_nt3v16Ev();
extern void _ZN10S4055C8_nt3v17Ev();
extern void _ZN10S4055C8_nt3v18Ev();
extern void _ZN10S4055C8_nt3v19Ev();
static  VTBL_ENTRY vtc_S4055C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4055C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S4055C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4055C8_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4055C8_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4055C8_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4055C8_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S4055C8_nt3v19Ev,
};
extern VTBL_ENTRY _ZTI10S4055C8_nt[];
VTBL_ENTRY *P__ZTI10S4055C8_nt = _ZTI10S4055C8_nt; 
extern  VTBL_ENTRY _ZTV10S4055C8_nt[];
Class_Descriptor cd_S4055C8_nt = {  "S4055C8_nt", // class name
  0,0,//no base classes
  &(vtc_S4055C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S4055C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S4055C8_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4055C9  {
  virtual  ~S4055C9(); // _ZN7S4055C9D1Ev
  virtual void  v20(); // _ZN7S4055C93v20Ev
  virtual void  v21(); // _ZN7S4055C93v21Ev
  virtual void  v22(); // _ZN7S4055C93v22Ev
  virtual void  v23(); // _ZN7S4055C93v23Ev
  S4055C9(); // tgen
};
//SIG(-1 S4055C9) C1{ vd v1 v2 v3 v4}


 S4055C9 ::~S4055C9(){ note_dtor("S4055C9", this);}
void  S4055C9 ::v20(){vfunc_called(this, "_ZN7S4055C93v20Ev");}
void  S4055C9 ::v21(){vfunc_called(this, "_ZN7S4055C93v21Ev");}
void  S4055C9 ::v22(){vfunc_called(this, "_ZN7S4055C93v22Ev");}
void  S4055C9 ::v23(){vfunc_called(this, "_ZN7S4055C93v23Ev");}
S4055C9 ::S4055C9(){ note_ctor("S4055C9", this);} // tgen

static void Test_S4055C9()
{
  extern Class_Descriptor cd_S4055C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4055C9, buf);
    S4055C9 *dp, &lv = *(dp=new (buf) S4055C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4055C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4055C9)");
    test_class_info(&lv, &cd_S4055C9);
    dp->~S4055C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4055C9(Test_S4055C9, "S4055C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4055C9C1Ev();
extern void _ZN7S4055C9D1Ev();
Name_Map name_map_S4055C9[] = {
  NSPAIR(_ZN7S4055C9C1Ev),
  NSPAIR(_ZN7S4055C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4055C9[];
extern void _ZN7S4055C9D1Ev();
extern void _ZN7S4055C9D0Ev();
extern void _ZN7S4055C93v20Ev();
extern void _ZN7S4055C93v21Ev();
extern void _ZN7S4055C93v22Ev();
extern void _ZN7S4055C93v23Ev();
static  VTBL_ENTRY vtc_S4055C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4055C9[0]),
  (VTBL_ENTRY)&_ZN7S4055C9D1Ev,
  (VTBL_ENTRY)&_ZN7S4055C9D0Ev,
  (VTBL_ENTRY)&_ZN7S4055C93v20Ev,
  (VTBL_ENTRY)&_ZN7S4055C93v21Ev,
  (VTBL_ENTRY)&_ZN7S4055C93v22Ev,
  (VTBL_ENTRY)&_ZN7S4055C93v23Ev,
};
extern VTBL_ENTRY _ZTI7S4055C9[];
extern  VTBL_ENTRY _ZTV7S4055C9[];
Class_Descriptor cd_S4055C9 = {  "S4055C9", // class name
  0,0,//no base classes
  &(vtc_S4055C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4055C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4055C9),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4055C10  {
  virtual  ~S4055C10(); // _ZN8S4055C10D1Ev
  virtual void  v24(); // _ZN8S4055C103v24Ev
  virtual void  v25(); // _ZN8S4055C103v25Ev
  S4055C10(); // tgen
};
//SIG(-1 S4055C10) C1{ vd v1 v2}


 S4055C10 ::~S4055C10(){ note_dtor("S4055C10", this);}
void  S4055C10 ::v24(){vfunc_called(this, "_ZN8S4055C103v24Ev");}
void  S4055C10 ::v25(){vfunc_called(this, "_ZN8S4055C103v25Ev");}
S4055C10 ::S4055C10(){ note_ctor("S4055C10", this);} // tgen

static void Test_S4055C10()
{
  extern Class_Descriptor cd_S4055C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4055C10, buf);
    S4055C10 *dp, &lv = *(dp=new (buf) S4055C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4055C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4055C10)");
    test_class_info(&lv, &cd_S4055C10);
    dp->~S4055C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4055C10(Test_S4055C10, "S4055C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S4055C10C1Ev();
extern void _ZN8S4055C10D1Ev();
Name_Map name_map_S4055C10[] = {
  NSPAIR(_ZN8S4055C10C1Ev),
  NSPAIR(_ZN8S4055C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S4055C10[];
extern void _ZN8S4055C10D1Ev();
extern void _ZN8S4055C10D0Ev();
extern void _ZN8S4055C103v24Ev();
extern void _ZN8S4055C103v25Ev();
static  VTBL_ENTRY vtc_S4055C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4055C10[0]),
  (VTBL_ENTRY)&_ZN8S4055C10D1Ev,
  (VTBL_ENTRY)&_ZN8S4055C10D0Ev,
  (VTBL_ENTRY)&_ZN8S4055C103v24Ev,
  (VTBL_ENTRY)&_ZN8S4055C103v25Ev,
};
extern VTBL_ENTRY _ZTI8S4055C10[];
extern  VTBL_ENTRY _ZTV8S4055C10[];
Class_Descriptor cd_S4055C10 = {  "S4055C10", // class name
  0,0,//no base classes
  &(vtc_S4055C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S4055C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S4055C10),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4055C11  {
  virtual  ~S4055C11(); // _ZN8S4055C11D1Ev
  virtual void  v26(); // _ZN8S4055C113v26Ev
  virtual void  v27(); // _ZN8S4055C113v27Ev
  S4055C11(); // tgen
};
//SIG(-1 S4055C11) C1{ vd v1 v2}


 S4055C11 ::~S4055C11(){ note_dtor("S4055C11", this);}
void  S4055C11 ::v26(){vfunc_called(this, "_ZN8S4055C113v26Ev");}
void  S4055C11 ::v27(){vfunc_called(this, "_ZN8S4055C113v27Ev");}
S4055C11 ::S4055C11(){ note_ctor("S4055C11", this);} // tgen

static void Test_S4055C11()
{
  extern Class_Descriptor cd_S4055C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4055C11, buf);
    S4055C11 *dp, &lv = *(dp=new (buf) S4055C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4055C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4055C11)");
    test_class_info(&lv, &cd_S4055C11);
    dp->~S4055C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4055C11(Test_S4055C11, "S4055C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S4055C11C1Ev();
extern void _ZN8S4055C11D1Ev();
Name_Map name_map_S4055C11[] = {
  NSPAIR(_ZN8S4055C11C1Ev),
  NSPAIR(_ZN8S4055C11D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S4055C11[];
extern void _ZN8S4055C11D1Ev();
extern void _ZN8S4055C11D0Ev();
extern void _ZN8S4055C113v26Ev();
extern void _ZN8S4055C113v27Ev();
static  VTBL_ENTRY vtc_S4055C11[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S4055C11[0]),
  (VTBL_ENTRY)&_ZN8S4055C11D1Ev,
  (VTBL_ENTRY)&_ZN8S4055C11D0Ev,
  (VTBL_ENTRY)&_ZN8S4055C113v26Ev,
  (VTBL_ENTRY)&_ZN8S4055C113v27Ev,
};
extern VTBL_ENTRY _ZTI8S4055C11[];
extern  VTBL_ENTRY _ZTV8S4055C11[];
Class_Descriptor cd_S4055C11 = {  "S4055C11", // class name
  0,0,//no base classes
  &(vtc_S4055C11[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S4055C11),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S4055C11),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4055C12_nt  {
  void *s4055c12f0;
  int s4055c12f1[2];
  void  mf4055c12(); // _ZN11S4055C12_nt9mf4055c12Ev
};
//SIG(-1 S4055C12_nt) C1{ m Fp Fi[2]}


void  S4055C12_nt ::mf4055c12(){}

//skip512 S4055C12_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4055C1  : S4055C2_nt , S4055C4 , S4055C7 , S4055C8_nt , S4055C9 , S4055C10 , S4055C11 {
  ::S4055C12_nt s4055c1f0;
  ::S4055C12_nt s4055c1f1;
  virtual  ~S4055C1(); // _ZN7S4055C1D1Ev
  virtual void  v1(); // _ZN7S4055C12v1Ev
  virtual void  v2(); // _ZN7S4055C12v2Ev
  virtual void  v3(); // _ZN7S4055C12v3Ev
  virtual void  v4(); // _ZN7S4055C12v4Ev
  virtual void  v5(); // _ZN7S4055C12v5Ev
  virtual void  v6(); // _ZN7S4055C12v6Ev
  virtual void  v7(); // _ZN7S4055C12v7Ev
  virtual void  v8(); // _ZN7S4055C12v8Ev
  virtual void  v9(); // _ZN7S4055C12v9Ev
  virtual void  v10(); // _ZN7S4055C13v10Ev
  virtual void  v11(); // _ZN7S4055C13v11Ev
  S4055C1(); // tgen
};
//SIG(1 S4055C1) C1{ BC2{ BC3{ vd m} vd v12 Fs[2]} BC4{ vd v13 v14 Fp FC5{ BC6{ m Fp Fi[2]} Fi[6]} FC5} BC7{ vd v15} BC8{ vd v16 v17 v18 v19} BC9{ vd v20 v21 v22 v23} BC10{ vd v24 v25} BC11{ vd v26 v27} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 FC12{ m Fp Fi[2]} FC12}


 S4055C1 ::~S4055C1(){ note_dtor("S4055C1", this);}
void  S4055C1 ::v1(){vfunc_called(this, "_ZN7S4055C12v1Ev");}
void  S4055C1 ::v2(){vfunc_called(this, "_ZN7S4055C12v2Ev");}
void  S4055C1 ::v3(){vfunc_called(this, "_ZN7S4055C12v3Ev");}
void  S4055C1 ::v4(){vfunc_called(this, "_ZN7S4055C12v4Ev");}
void  S4055C1 ::v5(){vfunc_called(this, "_ZN7S4055C12v5Ev");}
void  S4055C1 ::v6(){vfunc_called(this, "_ZN7S4055C12v6Ev");}
void  S4055C1 ::v7(){vfunc_called(this, "_ZN7S4055C12v7Ev");}
void  S4055C1 ::v8(){vfunc_called(this, "_ZN7S4055C12v8Ev");}
void  S4055C1 ::v9(){vfunc_called(this, "_ZN7S4055C12v9Ev");}
void  S4055C1 ::v10(){vfunc_called(this, "_ZN7S4055C13v10Ev");}
void  S4055C1 ::v11(){vfunc_called(this, "_ZN7S4055C13v11Ev");}
S4055C1 ::S4055C1(){ note_ctor("S4055C1", this);} // tgen

static void Test_S4055C1()
{
  extern Class_Descriptor cd_S4055C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,34)];
    init_test(&cd_S4055C1, buf);
    S4055C1 *dp, &lv = *(dp=new (buf) S4055C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,132), "sizeof(S4055C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4055C1)");
    check_base_class_offset(lv, (S4055C3_nt*)(S4055C2_nt*), 0, "S4055C1");
    check_base_class_offset(lv, (S4055C2_nt*), 0, "S4055C1");
    check_base_class_offset(lv, (S4055C4*), ABISELECT(16,8), "S4055C1");
    check_base_class_offset(lv, (S4055C7*), ABISELECT(112,88), "S4055C1");
    check_base_class_offset(lv, (S4055C8_nt*), ABISELECT(120,92), "S4055C1");
    check_base_class_offset(lv, (S4055C9*), ABISELECT(128,96), "S4055C1");
    check_base_class_offset(lv, (S4055C10*), ABISELECT(136,100), "S4055C1");
    check_base_class_offset(lv, (S4055C11*), ABISELECT(144,104), "S4055C1");
    check_field_offset(lv, s4055c1f0, ABISELECT(152,108), "S4055C1.s4055c1f0");
    check_field_offset(lv, s4055c1f1, ABISELECT(168,120), "S4055C1.s4055c1f1");
    test_class_info(&lv, &cd_S4055C1);
    dp->~S4055C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4055C1(Test_S4055C1, "S4055C1", ABISELECT(184,132));

#else // __cplusplus

extern void _ZN7S4055C1C1Ev();
extern void _ZN7S4055C1D1Ev();
Name_Map name_map_S4055C1[] = {
  NSPAIR(_ZN7S4055C1C1Ev),
  NSPAIR(_ZN7S4055C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C2_nt;
extern VTBL_ENTRY _ZTI10S4055C2_nt[];
extern  VTBL_ENTRY _ZTV10S4055C2_nt[];
extern Class_Descriptor cd_S4055C4;
extern VTBL_ENTRY _ZTI7S4055C4[];
extern  VTBL_ENTRY _ZTV7S4055C4[];
extern Class_Descriptor cd_S4055C7;
extern VTBL_ENTRY _ZTI7S4055C7[];
extern  VTBL_ENTRY _ZTV7S4055C7[];
extern Class_Descriptor cd_S4055C8_nt;
extern VTBL_ENTRY _ZTI10S4055C8_nt[];
extern  VTBL_ENTRY _ZTV10S4055C8_nt[];
extern Class_Descriptor cd_S4055C9;
extern VTBL_ENTRY _ZTI7S4055C9[];
extern  VTBL_ENTRY _ZTV7S4055C9[];
extern Class_Descriptor cd_S4055C10;
extern VTBL_ENTRY _ZTI8S4055C10[];
extern  VTBL_ENTRY _ZTV8S4055C10[];
extern Class_Descriptor cd_S4055C11;
extern VTBL_ENTRY _ZTI8S4055C11[];
extern  VTBL_ENTRY _ZTV8S4055C11[];
static Base_Class bases_S4055C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4055C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C4,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C7,    ABISELECT(112,88), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C8_nt,    ABISELECT(120,92), //bcp->offset
    27, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C9,    ABISELECT(128,96), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C10,    ABISELECT(136,100), //bcp->offset
    43, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C11,    ABISELECT(144,104), //bcp->offset
    49, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4055C1[];
extern void _ZN7S4055C1D1Ev();
extern void _ZN7S4055C1D0Ev();
extern void _ZN10S4055C2_nt3v12Ev();
extern void _ZN7S4055C12v1Ev();
extern void _ZN7S4055C12v2Ev();
extern void _ZN7S4055C12v3Ev();
extern void _ZN7S4055C12v4Ev();
extern void _ZN7S4055C12v5Ev();
extern void _ZN7S4055C12v6Ev();
extern void _ZN7S4055C12v7Ev();
extern void _ZN7S4055C12v8Ev();
extern void _ZN7S4055C12v9Ev();
extern void _ZN7S4055C13v10Ev();
extern void _ZN7S4055C13v11Ev();
extern void ABISELECT(_ZThn16_N7S4055C1D1Ev,_ZThn8_N7S4055C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S4055C1D0Ev,_ZThn8_N7S4055C1D0Ev)();
extern void _ZN7S4055C43v13Ev();
extern void _ZN7S4055C43v14Ev();
extern void ABISELECT(_ZThn112_N7S4055C1D1Ev,_ZThn88_N7S4055C1D1Ev)();
extern void ABISELECT(_ZThn112_N7S4055C1D0Ev,_ZThn88_N7S4055C1D0Ev)();
extern void _ZN7S4055C73v15Ev();
extern void ABISELECT(_ZThn120_N7S4055C1D1Ev,_ZThn92_N7S4055C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S4055C1D0Ev,_ZThn92_N7S4055C1D0Ev)();
extern void _ZN10S4055C8_nt3v16Ev();
extern void _ZN10S4055C8_nt3v17Ev();
extern void _ZN10S4055C8_nt3v18Ev();
extern void _ZN10S4055C8_nt3v19Ev();
extern void ABISELECT(_ZThn128_N7S4055C1D1Ev,_ZThn96_N7S4055C1D1Ev)();
extern void ABISELECT(_ZThn128_N7S4055C1D0Ev,_ZThn96_N7S4055C1D0Ev)();
extern void _ZN7S4055C93v20Ev();
extern void _ZN7S4055C93v21Ev();
extern void _ZN7S4055C93v22Ev();
extern void _ZN7S4055C93v23Ev();
extern void ABISELECT(_ZThn136_N7S4055C1D1Ev,_ZThn100_N7S4055C1D1Ev)();
extern void ABISELECT(_ZThn136_N7S4055C1D0Ev,_ZThn100_N7S4055C1D0Ev)();
extern void _ZN8S4055C103v24Ev();
extern void _ZN8S4055C103v25Ev();
extern void ABISELECT(_ZThn144_N7S4055C1D1Ev,_ZThn104_N7S4055C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S4055C1D0Ev,_ZThn104_N7S4055C1D0Ev)();
extern void _ZN8S4055C113v26Ev();
extern void _ZN8S4055C113v27Ev();
static  VTBL_ENTRY vtc_S4055C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4055C1[0]),
  (VTBL_ENTRY)&_ZN7S4055C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4055C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4055C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN7S4055C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4055C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4055C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4055C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4055C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4055C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4055C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4055C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4055C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4055C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4055C13v11Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S4055C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4055C1D1Ev,_ZThn8_N7S4055C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S4055C1D0Ev,_ZThn8_N7S4055C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4055C43v13Ev,
  (VTBL_ENTRY)&_ZN7S4055C43v14Ev,
  ABISELECT(-112,-88),
  (VTBL_ENTRY)&(_ZTI7S4055C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S4055C1D1Ev,_ZThn88_N7S4055C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N7S4055C1D0Ev,_ZThn88_N7S4055C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4055C73v15Ev,
  ABISELECT(-120,-92),
  (VTBL_ENTRY)&(_ZTI7S4055C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S4055C1D1Ev,_ZThn92_N7S4055C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S4055C1D0Ev,_ZThn92_N7S4055C1D0Ev),
  (VTBL_ENTRY)&_ZN10S4055C8_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S4055C8_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S4055C8_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S4055C8_nt3v19Ev,
  ABISELECT(-128,-96),
  (VTBL_ENTRY)&(_ZTI7S4055C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S4055C1D1Ev,_ZThn96_N7S4055C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn128_N7S4055C1D0Ev,_ZThn96_N7S4055C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4055C93v20Ev,
  (VTBL_ENTRY)&_ZN7S4055C93v21Ev,
  (VTBL_ENTRY)&_ZN7S4055C93v22Ev,
  (VTBL_ENTRY)&_ZN7S4055C93v23Ev,
  ABISELECT(-136,-100),
  (VTBL_ENTRY)&(_ZTI7S4055C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N7S4055C1D1Ev,_ZThn100_N7S4055C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn136_N7S4055C1D0Ev,_ZThn100_N7S4055C1D0Ev),
  (VTBL_ENTRY)&_ZN8S4055C103v24Ev,
  (VTBL_ENTRY)&_ZN8S4055C103v25Ev,
  ABISELECT(-144,-104),
  (VTBL_ENTRY)&(_ZTI7S4055C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S4055C1D1Ev,_ZThn104_N7S4055C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S4055C1D0Ev,_ZThn104_N7S4055C1D0Ev),
  (VTBL_ENTRY)&_ZN8S4055C113v26Ev,
  (VTBL_ENTRY)&_ZN8S4055C113v27Ev,
};
extern VTBL_ENTRY _ZTI7S4055C1[];
extern  VTBL_ENTRY _ZTV7S4055C1[];
Class_Descriptor cd_S4055C1 = {  "S4055C1", // class name
  bases_S4055C1, 8,
  &(vtc_S4055C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,132), // object size
  NSPAIRA(_ZTI7S4055C1),ABISELECT(136,72), //typeinfo_var
  NSPAIRA(_ZTV7S4055C1),55, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  8, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2651C3_nt  {
  int s2651c3f0;
  void  mf2651c3(); // _ZN10S2651C3_nt8mf2651c3Ev
};
//SIG(-1 S2651C3_nt) C1{ m Fi}


void  S2651C3_nt ::mf2651c3(){}

//skip512 S2651C3_nt

#else // __cplusplus

Class_Descriptor cd_S2651C3_nt = {  "S2651C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2651C2_nt  : S2651C3_nt {
};
//SIG(-1 S2651C2_nt) C1{ BC2{ m Fi}}



//skip512 S2651C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S2651C3_nt;
static Base_Class bases_S2651C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2651C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2651C2_nt = {  "S2651C2_nt", // class name
  bases_S2651C2_nt, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2651C4  {
  int s2651c4f0:2;
  int s2651c4f1:2;
  unsigned int s2651c4f2:1;
  unsigned int s2651c4f3:1;
  int s2651c4f4:2;
  int s2651c4f5:2;
  int s2651c4f6:2;
  int s2651c4f7:2;
  int s2651c4f8:2;
  int s2651c4f9:3;
  int s2651c4f10:3;
  int s2651c4f11:3;
  void  mf2651c4(); // _ZN7S2651C48mf2651c4Ev
};
//SIG(-1 S2651C4) C1{ m Fi:2 Fi:2 Fi:1 Fi:1 Fi:2 Fi:2 Fi:2 Fi:2 Fi:2 Fi:3 Fi:3 Fi:3}


void  S2651C4 ::mf2651c4(){}

static void Test_S2651C4()
{
  {
    init_simple_test("S2651C4");
    static S2651C4 lv;
    check2(sizeof(lv), 4, "sizeof(S2651C4)");
    check2(__alignof__(lv), 4, "__alignof__(S2651C4)");
    set_bf_and_test(lv, s2651c4f0, 0, 0, 2, 1, "S2651C4");
    set_bf_and_test(lv, s2651c4f0, 0, 0, 2, hide_sll(1LL<<1), "S2651C4");
    set_bf_and_test(lv, s2651c4f1, 0, 2, 2, 1, "S2651C4");
    set_bf_and_test(lv, s2651c4f1, 0, 2, 2, hide_sll(1LL<<1), "S2651C4");
    set_bf_and_test(lv, s2651c4f2, 0, 4, 1, 1, "S2651C4");
    set_bf_and_test(lv, s2651c4f3, 0, 5, 1, 1, "S2651C4");
    set_bf_and_test(lv, s2651c4f4, 0, 6, 2, 1, "S2651C4");
    set_bf_and_test(lv, s2651c4f4, 0, 6, 2, hide_sll(1LL<<1), "S2651C4");
    set_bf_and_test(lv, s2651c4f5, 1, 0, 2, 1, "S2651C4");
    set_bf_and_test(lv, s2651c4f5, 1, 0, 2, hide_sll(1LL<<1), "S2651C4");
    set_bf_and_test(lv, s2651c4f6, 1, 2, 2, 1, "S2651C4");
    set_bf_and_test(lv, s2651c4f6, 1, 2, 2, hide_sll(1LL<<1), "S2651C4");
    set_bf_and_test(lv, s2651c4f7, 1, 4, 2, 1, "S2651C4");
    set_bf_and_test(lv, s2651c4f7, 1, 4, 2, hide_sll(1LL<<1), "S2651C4");
    set_bf_and_test(lv, s2651c4f8, 1, 6, 2, 1, "S2651C4");
    set_bf_and_test(lv, s2651c4f8, 1, 6, 2, hide_sll(1LL<<1), "S2651C4");
    set_bf_and_test(lv, s2651c4f9, 2, 0, 3, 1, "S2651C4");
    set_bf_and_test(lv, s2651c4f9, 2, 0, 3, hide_sll(1LL<<2), "S2651C4");
    set_bf_and_test(lv, s2651c4f10, 2, 3, 3, 1, "S2651C4");
    set_bf_and_test(lv, s2651c4f10, 2, 3, 3, hide_sll(1LL<<2), "S2651C4");
    set_bf_and_test(lv, s2651c4f11, 2, 6, 3, 1, "S2651C4");
    set_bf_and_test(lv, s2651c4f11, 2, 6, 3, hide_sll(1LL<<2), "S2651C4");
  }
}
static Arrange_To_Call_Me vS2651C4(Test_S2651C4, "S2651C4", 4);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2651C6_nt  {
  ::S7924C15_nt s2651c6f0;
  void  mf2651c6(); // _ZN10S2651C6_nt8mf2651c6Ev
};
//SIG(-1 S2651C6_nt) C1{ m FC2{ m Fp}}


void  S2651C6_nt ::mf2651c6(){}

//skip512 S2651C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2651C11_nt  {
  void *s2651c11f0;
  void  mf2651c11(); // _ZN11S2651C11_nt9mf2651c11Ev
};
//SIG(-1 S2651C11_nt) C1{ m Fp}


void  S2651C11_nt ::mf2651c11(){}

//skip512 S2651C11_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2651C10  {
  ::S2651C11_nt s2651c10f0;
  void  mf2651c10(); // _ZN8S2651C109mf2651c10Ev
};
//SIG(-1 S2651C10) C1{ m FC2{ m Fp}}


void  S2651C10 ::mf2651c10(){}

static void Test_S2651C10()
{
  {
    init_simple_test("S2651C10");
    S2651C10 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2651C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2651C10)");
    check_field_offset(lv, s2651c10f0, 0, "S2651C10.s2651c10f0");
  }
}
static Arrange_To_Call_Me vS2651C10(Test_S2651C10, "S2651C10", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2651C14  {
  ::S2651C11_nt s2651c14f0;
  void  mf2651c14(); // _ZN8S2651C149mf2651c14Ev
};
//SIG(-1 S2651C14) C1{ m FC2{ m Fp}}


void  S2651C14 ::mf2651c14(){}

static void Test_S2651C14()
{
  {
    init_simple_test("S2651C14");
    S2651C14 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2651C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2651C14)");
    check_field_offset(lv, s2651c14f0, 0, "S2651C14.s2651c14f0");
  }
}
static Arrange_To_Call_Me vS2651C14(Test_S2651C14, "S2651C14", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2651C19  {
  void *s2651c19f0;
  void  mf2651c19(); // _ZN8S2651C199mf2651c19Ev
};
//SIG(-1 S2651C19) C1{ m Fp}


void  S2651C19 ::mf2651c19(){}

static void Test_S2651C19()
{
  {
    init_simple_test("S2651C19");
    S2651C19 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2651C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2651C19)");
    check_field_offset(lv, s2651c19f0, 0, "S2651C19.s2651c19f0");
  }
}
static Arrange_To_Call_Me vS2651C19(Test_S2651C19, "S2651C19", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2651C18  {
  ::S2651C19 s2651c18f0;
  void  mf2651c18(); // _ZN8S2651C189mf2651c18Ev
};
//SIG(-1 S2651C18) C1{ m FC2{ m Fp}}


void  S2651C18 ::mf2651c18(){}

static void Test_S2651C18()
{
  {
    init_simple_test("S2651C18");
    S2651C18 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2651C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2651C18)");
    check_field_offset(lv, s2651c18f0, 0, "S2651C18.s2651c18f0");
  }
}
static Arrange_To_Call_Me vS2651C18(Test_S2651C18, "S2651C18", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2651C1  : S2651C2_nt {
  ::S2651C4 s2651c1f0;
  ::S8663C5_nt s2651c1f1;
  ::S2651C6_nt s2651c1f2;
  ::S2651C6_nt s2651c1f3;
  ::S2651C10 s2651c1f4;
  ::S2651C10 s2651c1f5;
  ::S2651C14 s2651c1f6;
  ::S2651C14 s2651c1f7;
  ::S2651C18 s2651c1f8;
  ::S2651C18 s2651c1f9;
};
//SIG(1 S2651C1) C1{ BC2{ BC3{ m Fi}} FC4{ m Fi:2 Fi:2 Fi:1 Fi:1 Fi:2 Fi:2 Fi:2 Fi:2 Fi:2 Fi:3 Fi:3 Fi:3} FC5{ m} FC6{ m FC7{ m Fp}} FC6 FC8{ m FC9{ m Fp}} FC8 FC10{ m FC9} FC10 FC11{ m FC12{ m Fp}} FC11}



static void Test_S2651C1()
{
  extern Class_Descriptor cd_S2651C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S2651C1, buf);
    S2651C1 &lv = *(new (buf) S2651C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S2651C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2651C1)");
    check_base_class_offset(lv, (S2651C3_nt*)(S2651C2_nt*), 0, "S2651C1");
    check_base_class_offset(lv, (S2651C2_nt*), 0, "S2651C1");
    check_field_offset(lv, s2651c1f0, 4, "S2651C1.s2651c1f0");
    check_field_offset(lv, s2651c1f1, 8, "S2651C1.s2651c1f1");
    check_field_offset(lv, s2651c1f2, ABISELECT(16,12), "S2651C1.s2651c1f2");
    check_field_offset(lv, s2651c1f3, ABISELECT(24,16), "S2651C1.s2651c1f3");
    check_field_offset(lv, s2651c1f4, ABISELECT(32,20), "S2651C1.s2651c1f4");
    check_field_offset(lv, s2651c1f5, ABISELECT(40,24), "S2651C1.s2651c1f5");
    check_field_offset(lv, s2651c1f6, ABISELECT(48,28), "S2651C1.s2651c1f6");
    check_field_offset(lv, s2651c1f7, ABISELECT(56,32), "S2651C1.s2651c1f7");
    check_field_offset(lv, s2651c1f8, ABISELECT(64,36), "S2651C1.s2651c1f8");
    check_field_offset(lv, s2651c1f9, ABISELECT(72,40), "S2651C1.s2651c1f9");
    test_class_info(&lv, &cd_S2651C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2651C1(Test_S2651C1, "S2651C1", ABISELECT(80,44));

#else // __cplusplus

extern Class_Descriptor cd_S2651C3_nt;
extern Class_Descriptor cd_S2651C2_nt;
static Base_Class bases_S2651C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2651C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2651C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2651C1 = {  "S2651C1", // class name
  bases_S2651C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(80,44), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8612C2_nt  {
  virtual  ~S8612C2_nt(); // _ZN10S8612C2_ntD1Ev
  virtual void  v14(); // _ZN10S8612C2_nt3v14Ev
  virtual void  v15(); // _ZN10S8612C2_nt3v15Ev
  virtual void  v16(); // _ZN10S8612C2_nt3v16Ev
  virtual void  v17(); // _ZN10S8612C2_nt3v17Ev
  virtual void  v18(); // _ZN10S8612C2_nt3v18Ev
  virtual void  v19(); // _ZN10S8612C2_nt3v19Ev
  virtual void  v20(); // _ZN10S8612C2_nt3v20Ev
  virtual void  v21(); // _ZN10S8612C2_nt3v21Ev
  virtual void  v22(); // _ZN10S8612C2_nt3v22Ev
  virtual void  v23(); // _ZN10S8612C2_nt3v23Ev
  virtual void  v24(); // _ZN10S8612C2_nt3v24Ev
  virtual void  v25(); // _ZN10S8612C2_nt3v25Ev
  virtual void  v26(); // _ZN10S8612C2_nt3v26Ev
  S8612C2_nt(); // tgen
};
//SIG(-1 S8612C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13}


 S8612C2_nt ::~S8612C2_nt(){ note_dtor("S8612C2_nt", this);}
void  S8612C2_nt ::v14(){vfunc_called(this, "_ZN10S8612C2_nt3v14Ev");}
void  S8612C2_nt ::v15(){vfunc_called(this, "_ZN10S8612C2_nt3v15Ev");}
void  S8612C2_nt ::v16(){vfunc_called(this, "_ZN10S8612C2_nt3v16Ev");}
void  S8612C2_nt ::v17(){vfunc_called(this, "_ZN10S8612C2_nt3v17Ev");}
void  S8612C2_nt ::v18(){vfunc_called(this, "_ZN10S8612C2_nt3v18Ev");}
void  S8612C2_nt ::v19(){vfunc_called(this, "_ZN10S8612C2_nt3v19Ev");}
void  S8612C2_nt ::v20(){vfunc_called(this, "_ZN10S8612C2_nt3v20Ev");}
void  S8612C2_nt ::v21(){vfunc_called(this, "_ZN10S8612C2_nt3v21Ev");}
void  S8612C2_nt ::v22(){vfunc_called(this, "_ZN10S8612C2_nt3v22Ev");}
void  S8612C2_nt ::v23(){vfunc_called(this, "_ZN10S8612C2_nt3v23Ev");}
void  S8612C2_nt ::v24(){vfunc_called(this, "_ZN10S8612C2_nt3v24Ev");}
void  S8612C2_nt ::v25(){vfunc_called(this, "_ZN10S8612C2_nt3v25Ev");}
void  S8612C2_nt ::v26(){vfunc_called(this, "_ZN10S8612C2_nt3v26Ev");}
S8612C2_nt ::S8612C2_nt(){ note_ctor("S8612C2_nt", this);} // tgen

//skip512 S8612C2_nt

#else // __cplusplus

extern void _ZN10S8612C2_ntC1Ev();
extern void _ZN10S8612C2_ntD1Ev();
Name_Map name_map_S8612C2_nt[] = {
  NSPAIR(_ZN10S8612C2_ntC1Ev),
  NSPAIR(_ZN10S8612C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8612C2_nt[];
extern void _ZN10S8612C2_ntD1Ev();
extern void _ZN10S8612C2_ntD0Ev();
extern void _ZN10S8612C2_nt3v14Ev();
extern void _ZN10S8612C2_nt3v15Ev();
extern void _ZN10S8612C2_nt3v16Ev();
extern void _ZN10S8612C2_nt3v17Ev();
extern void _ZN10S8612C2_nt3v18Ev();
extern void _ZN10S8612C2_nt3v19Ev();
extern void _ZN10S8612C2_nt3v20Ev();
extern void _ZN10S8612C2_nt3v21Ev();
extern void _ZN10S8612C2_nt3v22Ev();
extern void _ZN10S8612C2_nt3v23Ev();
extern void _ZN10S8612C2_nt3v24Ev();
extern void _ZN10S8612C2_nt3v25Ev();
extern void _ZN10S8612C2_nt3v26Ev();
static  VTBL_ENTRY vtc_S8612C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8612C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8612C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI10S8612C2_nt[];
VTBL_ENTRY *P__ZTI10S8612C2_nt = _ZTI10S8612C2_nt; 
extern  VTBL_ENTRY _ZTV10S8612C2_nt[];
Class_Descriptor cd_S8612C2_nt = {  "S8612C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8612C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S8612C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8612C2_nt),17, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8612C3_nt  : S8663C5_nt {
  int s8612c3f0;
};
//SIG(-1 S8612C3_nt) C1{ BC2{ m} Fi}



//skip512 S8612C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S8663C5_nt;
static Base_Class bases_S8612C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8663C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8612C5_nt  {
  int s8612c5f0;
  char s8612c5f1;
  void  mf8612c5(); // _ZN10S8612C5_nt8mf8612c5Ev
};
//SIG(-1 S8612C5_nt) C1{ m Fi Fc}


void  S8612C5_nt ::mf8612c5(){}

//skip512 S8612C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8612C7  : S8663C5_nt {
  char s8612c7f0;
  int s8612c7f1;
  ::S8612C5_nt s8612c7f2;
  ::S8612C5_nt s8612c7f3;
  char s8612c7f4;
  int s8612c7f5;
  void *s8612c7f6;
};
//SIG(-1 S8612C7) C1{ BC2{ m} Fc Fi FC3{ m Fi Fc} FC3 Fc Fi Fp}



static void Test_S8612C7()
{
  extern Class_Descriptor cd_S8612C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,10)];
    init_test(&cd_S8612C7, buf);
    S8612C7 &lv = *(new (buf) S8612C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S8612C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8612C7)");
    check_base_class_offset(lv, (S8663C5_nt*), 0, "S8612C7");
    check_field_offset(lv, s8612c7f0, 0, "S8612C7.s8612c7f0");
    check_field_offset(lv, s8612c7f1, 4, "S8612C7.s8612c7f1");
    check_field_offset(lv, s8612c7f2, 8, "S8612C7.s8612c7f2");
    check_field_offset(lv, s8612c7f3, 16, "S8612C7.s8612c7f3");
    check_field_offset(lv, s8612c7f4, 24, "S8612C7.s8612c7f4");
    check_field_offset(lv, s8612c7f5, 28, "S8612C7.s8612c7f5");
    check_field_offset(lv, s8612c7f6, 32, "S8612C7.s8612c7f6");
    test_class_info(&lv, &cd_S8612C7);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8612C7(Test_S8612C7, "S8612C7", ABISELECT(40,36));

#else // __cplusplus

extern Class_Descriptor cd_S8663C5_nt;
static Base_Class bases_S8612C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8663C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S8612C7 = {  "S8612C7", // class name
  bases_S8612C7, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,36), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8612C8_nt  {
  int s8612c8f0;
  void *s8612c8f1;
};
//SIG(-1 S8612C8_nt) C1{ Fi Fp}



//skip512 S8612C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8612C1  : S8612C2_nt {
  void *s8612c1f0;
  int s8612c1f1[3];
  ::S8612C3_nt s8612c1f2;
  void *s8612c1f3;
  int s8612c1f4[3];
  void *s8612c1f5;
  int s8612c1f6;
  ::S8612C5_nt s8612c1f7;
  ::S8612C5_nt s8612c1f8;
  ::S8612C7 s8612c1f9;
  int s8612c1f10[2];
  void *s8612c1f11;
  int s8612c1f12;
  void *s8612c1f13;
  ::S8612C8_nt s8612c1f14;
  virtual  ~S8612C1(); // _ZN7S8612C1D1Ev
  virtual void  v1(); // _ZN7S8612C12v1Ev
  virtual void  v2(); // _ZN7S8612C12v2Ev
  virtual void  v3(); // _ZN7S8612C12v3Ev
  virtual void  v4(); // _ZN7S8612C12v4Ev
  virtual void  v5(); // _ZN7S8612C12v5Ev
  virtual void  v6(); // _ZN7S8612C12v6Ev
  virtual void  v7(); // _ZN7S8612C12v7Ev
  virtual void  v8(); // _ZN7S8612C12v8Ev
  virtual void  v9(); // _ZN7S8612C12v9Ev
  virtual void  v10(); // _ZN7S8612C13v10Ev
  virtual void  v11(); // _ZN7S8612C13v11Ev
  virtual void  v12(); // _ZN7S8612C13v12Ev
  virtual void  v13(); // _ZN7S8612C13v13Ev
  S8612C1(); // tgen
};
//SIG(1 S8612C1) C1{ BC2{ vd v14 v15 v16 v17 v18 v19 v20 v21 v22 v23 v24 v25 v26} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 Fp Fi[3] FC3{ BC4{ m} Fi} Fp Fi[3] Fp Fi FC5{ m Fi Fc} FC5 FC6{ BC4 Fc Fi FC5 FC5 Fc Fi Fp} Fi[2] Fp Fi Fp FC7{ Fi Fp}}


 S8612C1 ::~S8612C1(){ note_dtor("S8612C1", this);}
void  S8612C1 ::v1(){vfunc_called(this, "_ZN7S8612C12v1Ev");}
void  S8612C1 ::v2(){vfunc_called(this, "_ZN7S8612C12v2Ev");}
void  S8612C1 ::v3(){vfunc_called(this, "_ZN7S8612C12v3Ev");}
void  S8612C1 ::v4(){vfunc_called(this, "_ZN7S8612C12v4Ev");}
void  S8612C1 ::v5(){vfunc_called(this, "_ZN7S8612C12v5Ev");}
void  S8612C1 ::v6(){vfunc_called(this, "_ZN7S8612C12v6Ev");}
void  S8612C1 ::v7(){vfunc_called(this, "_ZN7S8612C12v7Ev");}
void  S8612C1 ::v8(){vfunc_called(this, "_ZN7S8612C12v8Ev");}
void  S8612C1 ::v9(){vfunc_called(this, "_ZN7S8612C12v9Ev");}
void  S8612C1 ::v10(){vfunc_called(this, "_ZN7S8612C13v10Ev");}
void  S8612C1 ::v11(){vfunc_called(this, "_ZN7S8612C13v11Ev");}
void  S8612C1 ::v12(){vfunc_called(this, "_ZN7S8612C13v12Ev");}
void  S8612C1 ::v13(){vfunc_called(this, "_ZN7S8612C13v13Ev");}
S8612C1 ::S8612C1(){ note_ctor("S8612C1", this);} // tgen

static void Test_S8612C1()
{
  extern Class_Descriptor cd_S8612C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,33)];
    init_test(&cd_S8612C1, buf);
    S8612C1 *dp, &lv = *(dp=new (buf) S8612C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,128), "sizeof(S8612C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8612C1)");
    check_base_class_offset(lv, (S8612C2_nt*), 0, "S8612C1");
    check_field_offset(lv, s8612c1f0, ABISELECT(8,4), "S8612C1.s8612c1f0");
    check_field_offset(lv, s8612c1f1, ABISELECT(16,8), "S8612C1.s8612c1f1");
    check_field_offset(lv, s8612c1f2, ABISELECT(28,20), "S8612C1.s8612c1f2");
    check_field_offset(lv, s8612c1f3, ABISELECT(32,24), "S8612C1.s8612c1f3");
    check_field_offset(lv, s8612c1f4, ABISELECT(40,28), "S8612C1.s8612c1f4");
    check_field_offset(lv, s8612c1f5, ABISELECT(56,40), "S8612C1.s8612c1f5");
    check_field_offset(lv, s8612c1f6, ABISELECT(64,44), "S8612C1.s8612c1f6");
    check_field_offset(lv, s8612c1f7, ABISELECT(68,48), "S8612C1.s8612c1f7");
    check_field_offset(lv, s8612c1f8, ABISELECT(76,56), "S8612C1.s8612c1f8");
    check_field_offset(lv, s8612c1f9, ABISELECT(88,64), "S8612C1.s8612c1f9");
    check_field_offset(lv, s8612c1f10, ABISELECT(128,100), "S8612C1.s8612c1f10");
    check_field_offset(lv, s8612c1f11, ABISELECT(136,108), "S8612C1.s8612c1f11");
    check_field_offset(lv, s8612c1f12, ABISELECT(144,112), "S8612C1.s8612c1f12");
    check_field_offset(lv, s8612c1f13, ABISELECT(152,116), "S8612C1.s8612c1f13");
    check_field_offset(lv, s8612c1f14, ABISELECT(160,120), "S8612C1.s8612c1f14");
    test_class_info(&lv, &cd_S8612C1);
    dp->~S8612C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8612C1(Test_S8612C1, "S8612C1", ABISELECT(176,128));

#else // __cplusplus

extern void _ZN7S8612C1C1Ev();
extern void _ZN7S8612C1D1Ev();
Name_Map name_map_S8612C1[] = {
  NSPAIR(_ZN7S8612C1C1Ev),
  NSPAIR(_ZN7S8612C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8612C2_nt;
extern VTBL_ENTRY _ZTI10S8612C2_nt[];
extern  VTBL_ENTRY _ZTV10S8612C2_nt[];
static Base_Class bases_S8612C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8612C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8612C1[];
extern void _ZN7S8612C1D1Ev();
extern void _ZN7S8612C1D0Ev();
extern void _ZN10S8612C2_nt3v14Ev();
extern void _ZN10S8612C2_nt3v15Ev();
extern void _ZN10S8612C2_nt3v16Ev();
extern void _ZN10S8612C2_nt3v17Ev();
extern void _ZN10S8612C2_nt3v18Ev();
extern void _ZN10S8612C2_nt3v19Ev();
extern void _ZN10S8612C2_nt3v20Ev();
extern void _ZN10S8612C2_nt3v21Ev();
extern void _ZN10S8612C2_nt3v22Ev();
extern void _ZN10S8612C2_nt3v23Ev();
extern void _ZN10S8612C2_nt3v24Ev();
extern void _ZN10S8612C2_nt3v25Ev();
extern void _ZN10S8612C2_nt3v26Ev();
extern void _ZN7S8612C12v1Ev();
extern void _ZN7S8612C12v2Ev();
extern void _ZN7S8612C12v3Ev();
extern void _ZN7S8612C12v4Ev();
extern void _ZN7S8612C12v5Ev();
extern void _ZN7S8612C12v6Ev();
extern void _ZN7S8612C12v7Ev();
extern void _ZN7S8612C12v8Ev();
extern void _ZN7S8612C12v9Ev();
extern void _ZN7S8612C13v10Ev();
extern void _ZN7S8612C13v11Ev();
extern void _ZN7S8612C13v12Ev();
extern void _ZN7S8612C13v13Ev();
static  VTBL_ENTRY vtc_S8612C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8612C1[0]),
  (VTBL_ENTRY)&_ZN7S8612C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8612C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S8612C2_nt3v26Ev,
  (VTBL_ENTRY)&_ZN7S8612C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8612C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8612C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8612C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8612C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8612C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8612C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8612C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8612C12v9Ev,
  (VTBL_ENTRY)&_ZN7S8612C13v10Ev,
  (VTBL_ENTRY)&_ZN7S8612C13v11Ev,
  (VTBL_ENTRY)&_ZN7S8612C13v12Ev,
  (VTBL_ENTRY)&_ZN7S8612C13v13Ev,
};
extern VTBL_ENTRY _ZTI7S8612C1[];
extern  VTBL_ENTRY _ZTV7S8612C1[];
Class_Descriptor cd_S8612C1 = {  "S8612C1", // class name
  bases_S8612C1, 1,
  &(vtc_S8612C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,128), // object size
  NSPAIRA(_ZTI7S8612C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8612C1),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8310C4_nt  {
  char s8310c4f0[12];
};
//SIG(-1 S8310C4_nt) C1{ Fc[12]}



//skip512 S8310C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8310C3  {
  ::S8310C4_nt s8310c3f0;
  void  mf8310c3(); // _ZN7S8310C38mf8310c3Ev
};
//SIG(-1 S8310C3) C1{ m FC2{ Fc[12]}}


void  S8310C3 ::mf8310c3(){}

static void Test_S8310C3()
{
  {
    init_simple_test("S8310C3");
    S8310C3 lv;
    check2(sizeof(lv), 12, "sizeof(S8310C3)");
    check2(__alignof__(lv), 1, "__alignof__(S8310C3)");
    check_field_offset(lv, s8310c3f0, 0, "S8310C3.s8310c3f0");
  }
}
static Arrange_To_Call_Me vS8310C3(Test_S8310C3, "S8310C3", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8310C10_nt  {
  int s8310c10f0;
};
//SIG(1 S8310C10_nt) C1{ Fi}



//skip512 S8310C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S8310C6  {
  ::S12844C15_nt s8310c6f0;
  ::S8715C5_nt s8310c6f1;
  ::S12844C9_nt s8310c6f2;
  ::S8310C10_nt s8310c6f3;
};
//SIG(1 S8310C6) U1{ FC2{ Fi} FC3{ Fi} FC4{ Fi Fi} FC5{ Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S8310C5  {
  int s8310c5f0;
  ::S8310C6 s8310c5f1;
  void  mf8310c5(); // _ZN7S8310C58mf8310c5Ev
};
//SIG(-1 S8310C5) C1{ m Fi FU2{ FC3{ Fi} FC4{ Fi} FC5{ Fi Fi} FC6{ Fi}}}


void  S8310C5 ::mf8310c5(){}

static void Test_S8310C5()
{
  {
    init_simple_test("S8310C5");
    S8310C5 lv;
    check2(sizeof(lv), 12, "sizeof(S8310C5)");
    check2(__alignof__(lv), 4, "__alignof__(S8310C5)");
    check_field_offset(lv, s8310c5f0, 0, "S8310C5.s8310c5f0");
    check_field_offset(lv, s8310c5f1, 4, "S8310C5.s8310c5f1");
  }
}
static Arrange_To_Call_Me vS8310C5(Test_S8310C5, "S8310C5", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8310C11  {
  char s8310c11f0[32];
  void  mf8310c11(); // _ZN8S8310C119mf8310c11Ev
};
//SIG(-1 S8310C11) C1{ m Fc[32]}


void  S8310C11 ::mf8310c11(){}

static void Test_S8310C11()
{
  {
    init_simple_test("S8310C11");
    S8310C11 lv;
    check2(sizeof(lv), 32, "sizeof(S8310C11)");
    check2(__alignof__(lv), 1, "__alignof__(S8310C11)");
    check_field_offset(lv, s8310c11f0, 0, "S8310C11.s8310c11f0");
  }
}
static Arrange_To_Call_Me vS8310C11(Test_S8310C11, "S8310C11", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8310C13  {
  char s8310c13f0[256];
  void  mf8310c13(); // _ZN8S8310C139mf8310c13Ev
};
//SIG(-1 S8310C13) C1{ m Fc[256]}


void  S8310C13 ::mf8310c13(){}

static void Test_S8310C13()
{
  {
    init_simple_test("S8310C13");
    S8310C13 lv;
    check2(sizeof(lv), 256, "sizeof(S8310C13)");
    check2(__alignof__(lv), 1, "__alignof__(S8310C13)");
    check_field_offset(lv, s8310c13f0, 0, "S8310C13.s8310c13f0");
  }
}
static Arrange_To_Call_Me vS8310C13(Test_S8310C13, "S8310C13", 256);

#else // __cplusplus

Class_Descriptor cd_S8310C13 = {  "S8310C13", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  256, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8310C12  : S8310C13 {
};
//SIG(-1 S8310C12) C1{ BC2{ m Fc[256]}}



static void Test_S8310C12()
{
  extern Class_Descriptor cd_S8310C12;
  void *lvp;
  {
    char buf[256];
    init_test(&cd_S8310C12, buf);
    S8310C12 &lv = *(new (buf) S8310C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), 256, "sizeof(S8310C12)");
    check2(__alignof__(lv), 1, "__alignof__(S8310C12)");
    check_base_class_offset(lv, (S8310C13*), 0, "S8310C12");
    test_class_info(&lv, &cd_S8310C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8310C12(Test_S8310C12, "S8310C12", 256);

#else // __cplusplus

extern Class_Descriptor cd_S8310C13;
static Base_Class bases_S8310C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8310C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S8310C12 = {  "S8310C12", // class name
  bases_S8310C12, 1,
  0, // no vftv
  0, //no vtt
  256, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8310C16  : S4055C3_nt {
  virtual  ~S8310C16(); // _ZN8S8310C16D1Ev
  virtual void  v9(); // _ZN8S8310C162v9Ev
  S8310C16(); // tgen
};
//SIG(-1 S8310C16) C1{ BC2{ vd m} vd v1}


 S8310C16 ::~S8310C16(){ note_dtor("S8310C16", this);}
void  S8310C16 ::v9(){vfunc_called(this, "_ZN8S8310C162v9Ev");}
S8310C16 ::S8310C16(){ note_ctor("S8310C16", this);} // tgen

static void Test_S8310C16()
{
  extern Class_Descriptor cd_S8310C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8310C16, buf);
    S8310C16 *dp, &lv = *(dp=new (buf) S8310C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8310C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8310C16)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S8310C16");
    test_class_info(&lv, &cd_S8310C16);
    dp->~S8310C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8310C16(Test_S8310C16, "S8310C16", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S8310C16C1Ev();
extern void _ZN8S8310C16D1Ev();
Name_Map name_map_S8310C16[] = {
  NSPAIR(_ZN8S8310C16C1Ev),
  NSPAIR(_ZN8S8310C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S8310C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S8310C16[];
extern void _ZN8S8310C16D1Ev();
extern void _ZN8S8310C16D0Ev();
extern void _ZN8S8310C162v9Ev();
static  VTBL_ENTRY vtc_S8310C16[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S8310C16[0]),
  (VTBL_ENTRY)&_ZN8S8310C16D1Ev,
  (VTBL_ENTRY)&_ZN8S8310C16D0Ev,
  (VTBL_ENTRY)&_ZN8S8310C162v9Ev,
};
extern VTBL_ENTRY _ZTI8S8310C16[];
extern  VTBL_ENTRY _ZTV8S8310C16[];
Class_Descriptor cd_S8310C16 = {  "S8310C16", // class name
  bases_S8310C16, 1,
  &(vtc_S8310C16[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S8310C16),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S8310C16),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8310C17  : S4055C3_nt {
  virtual  ~S8310C17(); // _ZN8S8310C17D1Ev
  virtual void  v10(); // _ZN8S8310C173v10Ev
  S8310C17(); // tgen
};
//SIG(-1 S8310C17) C1{ BC2{ vd m} vd v1}


 S8310C17 ::~S8310C17(){ note_dtor("S8310C17", this);}
void  S8310C17 ::v10(){vfunc_called(this, "_ZN8S8310C173v10Ev");}
S8310C17 ::S8310C17(){ note_ctor("S8310C17", this);} // tgen

static void Test_S8310C17()
{
  extern Class_Descriptor cd_S8310C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8310C17, buf);
    S8310C17 *dp, &lv = *(dp=new (buf) S8310C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8310C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8310C17)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S8310C17");
    test_class_info(&lv, &cd_S8310C17);
    dp->~S8310C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8310C17(Test_S8310C17, "S8310C17", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S8310C17C1Ev();
extern void _ZN8S8310C17D1Ev();
Name_Map name_map_S8310C17[] = {
  NSPAIR(_ZN8S8310C17C1Ev),
  NSPAIR(_ZN8S8310C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S8310C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S8310C17[];
extern void _ZN8S8310C17D1Ev();
extern void _ZN8S8310C17D0Ev();
extern void _ZN8S8310C173v10Ev();
static  VTBL_ENTRY vtc_S8310C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S8310C17[0]),
  (VTBL_ENTRY)&_ZN8S8310C17D1Ev,
  (VTBL_ENTRY)&_ZN8S8310C17D0Ev,
  (VTBL_ENTRY)&_ZN8S8310C173v10Ev,
};
extern VTBL_ENTRY _ZTI8S8310C17[];
extern  VTBL_ENTRY _ZTV8S8310C17[];
Class_Descriptor cd_S8310C17 = {  "S8310C17", // class name
  bases_S8310C17, 1,
  &(vtc_S8310C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S8310C17),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S8310C17),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8310C15  : S4055C3_nt , S8310C16 , S8310C17 {
  virtual  ~S8310C15(); // _ZN8S8310C15D1Ev
  virtual void  v11(); // _ZN8S8310C153v11Ev
  virtual void  v12(); // _ZN8S8310C153v12Ev
  virtual void  v13(); // _ZN8S8310C153v13Ev
  virtual void  v14(); // _ZN8S8310C153v14Ev
  virtual void  v15(); // _ZN8S8310C153v15Ev
  virtual void  v16(); // _ZN8S8310C153v16Ev
  S8310C15(); // tgen
};
//SIG(-1 S8310C15) C1{ BC2{ vd m} BC3{ BC2 vd v7} BC4{ BC2 vd v8} vd v1 v2 v3 v4 v5 v6}


 S8310C15 ::~S8310C15(){ note_dtor("S8310C15", this);}
void  S8310C15 ::v11(){vfunc_called(this, "_ZN8S8310C153v11Ev");}
void  S8310C15 ::v12(){vfunc_called(this, "_ZN8S8310C153v12Ev");}
void  S8310C15 ::v13(){vfunc_called(this, "_ZN8S8310C153v13Ev");}
void  S8310C15 ::v14(){vfunc_called(this, "_ZN8S8310C153v14Ev");}
void  S8310C15 ::v15(){vfunc_called(this, "_ZN8S8310C153v15Ev");}
void  S8310C15 ::v16(){vfunc_called(this, "_ZN8S8310C153v16Ev");}
S8310C15 ::S8310C15(){ note_ctor("S8310C15", this);} // tgen

static void Test_S8310C15()
{
  extern Class_Descriptor cd_S8310C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8310C15, buf);
    S8310C15 *dp, &lv = *(dp=new (buf) S8310C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8310C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8310C15)");
    /*is_ambiguous_... S8310C15::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S8310C15");
    check_base_class_offset(lv, (S4055C3_nt*)(S8310C16*), ABISELECT(8,4), "S8310C15");
    check_base_class_offset(lv, (S8310C16*), ABISELECT(8,4), "S8310C15");
    check_base_class_offset(lv, (S4055C3_nt*)(S8310C17*), ABISELECT(16,8), "S8310C15");
    check_base_class_offset(lv, (S8310C17*), ABISELECT(16,8), "S8310C15");
    test_class_info(&lv, &cd_S8310C15);
    dp->~S8310C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8310C15(Test_S8310C15, "S8310C15", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S8310C15C1Ev();
extern void _ZN8S8310C15D1Ev();
Name_Map name_map_S8310C15[] = {
  NSPAIR(_ZN8S8310C15C1Ev),
  NSPAIR(_ZN8S8310C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S8310C16;
extern VTBL_ENTRY _ZTI8S8310C16[];
extern  VTBL_ENTRY _ZTV8S8310C16[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S8310C17;
extern VTBL_ENTRY _ZTI8S8310C17[];
extern  VTBL_ENTRY _ZTV8S8310C17[];
static Base_Class bases_S8310C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S8310C16,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S8310C17,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S8310C15[];
extern void _ZN8S8310C15D1Ev();
extern void _ZN8S8310C15D0Ev();
extern void _ZN8S8310C153v11Ev();
extern void _ZN8S8310C153v12Ev();
extern void _ZN8S8310C153v13Ev();
extern void _ZN8S8310C153v14Ev();
extern void _ZN8S8310C153v15Ev();
extern void _ZN8S8310C153v16Ev();
extern void ABISELECT(_ZThn8_N8S8310C15D1Ev,_ZThn4_N8S8310C15D1Ev)();
extern void ABISELECT(_ZThn8_N8S8310C15D0Ev,_ZThn4_N8S8310C15D0Ev)();
extern void _ZN8S8310C162v9Ev();
extern void ABISELECT(_ZThn16_N8S8310C15D1Ev,_ZThn8_N8S8310C15D1Ev)();
extern void ABISELECT(_ZThn16_N8S8310C15D0Ev,_ZThn8_N8S8310C15D0Ev)();
extern void _ZN8S8310C173v10Ev();
static  VTBL_ENTRY vtc_S8310C15[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S8310C15[0]),
  (VTBL_ENTRY)&_ZN8S8310C15D1Ev,
  (VTBL_ENTRY)&_ZN8S8310C15D0Ev,
  (VTBL_ENTRY)&_ZN8S8310C153v11Ev,
  (VTBL_ENTRY)&_ZN8S8310C153v12Ev,
  (VTBL_ENTRY)&_ZN8S8310C153v13Ev,
  (VTBL_ENTRY)&_ZN8S8310C153v14Ev,
  (VTBL_ENTRY)&_ZN8S8310C153v15Ev,
  (VTBL_ENTRY)&_ZN8S8310C153v16Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S8310C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S8310C15D1Ev,_ZThn4_N8S8310C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S8310C15D0Ev,_ZThn4_N8S8310C15D0Ev),
  (VTBL_ENTRY)&_ZN8S8310C162v9Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S8310C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S8310C15D1Ev,_ZThn8_N8S8310C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S8310C15D0Ev,_ZThn8_N8S8310C15D0Ev),
  (VTBL_ENTRY)&_ZN8S8310C173v10Ev,
};
extern VTBL_ENTRY _ZTI8S8310C15[];
extern  VTBL_ENTRY _ZTV8S8310C15[];
Class_Descriptor cd_S8310C15 = {  "S8310C15", // class name
  bases_S8310C15, 5,
  &(vtc_S8310C15[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S8310C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S8310C15),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8310C14  : S8310C15 {
  int s8310c14f0;
  virtual  ~S8310C14(); // _ZN8S8310C14D1Ev
  virtual void  v1(); // _ZN8S8310C142v1Ev
  virtual void  v2(); // _ZN8S8310C142v2Ev
  virtual void  v3(); // _ZN8S8310C142v3Ev
  virtual void  v4(); // _ZN8S8310C142v4Ev
  virtual void  v5(); // _ZN8S8310C142v5Ev
  virtual void  v6(); // _ZN8S8310C142v6Ev
  virtual void  v7(); // _ZN8S8310C142v7Ev
  virtual void  v8(); // _ZN8S8310C142v8Ev
  S8310C14(); // tgen
};
//SIG(-1 S8310C14) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v9} BC5{ BC3 vd v10} vd v11 v12 v13 v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi}


 S8310C14 ::~S8310C14(){ note_dtor("S8310C14", this);}
void  S8310C14 ::v1(){vfunc_called(this, "_ZN8S8310C142v1Ev");}
void  S8310C14 ::v2(){vfunc_called(this, "_ZN8S8310C142v2Ev");}
void  S8310C14 ::v3(){vfunc_called(this, "_ZN8S8310C142v3Ev");}
void  S8310C14 ::v4(){vfunc_called(this, "_ZN8S8310C142v4Ev");}
void  S8310C14 ::v5(){vfunc_called(this, "_ZN8S8310C142v5Ev");}
void  S8310C14 ::v6(){vfunc_called(this, "_ZN8S8310C142v6Ev");}
void  S8310C14 ::v7(){vfunc_called(this, "_ZN8S8310C142v7Ev");}
void  S8310C14 ::v8(){vfunc_called(this, "_ZN8S8310C142v8Ev");}
S8310C14 ::S8310C14(){ note_ctor("S8310C14", this);} // tgen

static void Test_S8310C14()
{
  extern Class_Descriptor cd_S8310C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S8310C14, buf);
    S8310C14 *dp, &lv = *(dp=new (buf) S8310C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S8310C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8310C14)");
    /*is_ambiguous_... S8310C15::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S8310C15*), 0, "S8310C14");
    check_base_class_offset(lv, (S4055C3_nt*)(S8310C16*)(S8310C15*), ABISELECT(8,4), "S8310C14");
    check_base_class_offset(lv, (S8310C16*)(S8310C15*), ABISELECT(8,4), "S8310C14");
    check_base_class_offset(lv, (S4055C3_nt*)(S8310C17*)(S8310C15*), ABISELECT(16,8), "S8310C14");
    check_base_class_offset(lv, (S8310C17*)(S8310C15*), ABISELECT(16,8), "S8310C14");
    check_base_class_offset(lv, (S8310C15*), 0, "S8310C14");
    check_field_offset(lv, s8310c14f0, ABISELECT(24,12), "S8310C14.s8310c14f0");
    test_class_info(&lv, &cd_S8310C14);
    dp->~S8310C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8310C14(Test_S8310C14, "S8310C14", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S8310C14C1Ev();
extern void _ZN8S8310C14D1Ev();
Name_Map name_map_S8310C14[] = {
  NSPAIR(_ZN8S8310C14C1Ev),
  NSPAIR(_ZN8S8310C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S8310C16;
extern VTBL_ENTRY _ZTI8S8310C16[];
extern  VTBL_ENTRY _ZTV8S8310C16[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S8310C17;
extern VTBL_ENTRY _ZTI8S8310C17[];
extern  VTBL_ENTRY _ZTV8S8310C17[];
extern Class_Descriptor cd_S8310C15;
extern VTBL_ENTRY _ZTI8S8310C15[];
extern  VTBL_ENTRY _ZTV8S8310C15[];
static Base_Class bases_S8310C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S8310C16,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S8310C17,    ABISELECT(16,8), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S8310C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S8310C14[];
extern void _ZN8S8310C14D1Ev();
extern void _ZN8S8310C14D0Ev();
extern void _ZN8S8310C153v11Ev();
extern void _ZN8S8310C153v12Ev();
extern void _ZN8S8310C153v13Ev();
extern void _ZN8S8310C153v14Ev();
extern void _ZN8S8310C153v15Ev();
extern void _ZN8S8310C153v16Ev();
extern void _ZN8S8310C142v1Ev();
extern void _ZN8S8310C142v2Ev();
extern void _ZN8S8310C142v3Ev();
extern void _ZN8S8310C142v4Ev();
extern void _ZN8S8310C142v5Ev();
extern void _ZN8S8310C142v6Ev();
extern void _ZN8S8310C142v7Ev();
extern void _ZN8S8310C142v8Ev();
extern void ABISELECT(_ZThn8_N8S8310C14D1Ev,_ZThn4_N8S8310C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S8310C14D0Ev,_ZThn4_N8S8310C14D0Ev)();
extern void _ZN8S8310C162v9Ev();
extern void ABISELECT(_ZThn16_N8S8310C14D1Ev,_ZThn8_N8S8310C14D1Ev)();
extern void ABISELECT(_ZThn16_N8S8310C14D0Ev,_ZThn8_N8S8310C14D0Ev)();
extern void _ZN8S8310C173v10Ev();
static  VTBL_ENTRY vtc_S8310C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S8310C14[0]),
  (VTBL_ENTRY)&_ZN8S8310C14D1Ev,
  (VTBL_ENTRY)&_ZN8S8310C14D0Ev,
  (VTBL_ENTRY)&_ZN8S8310C153v11Ev,
  (VTBL_ENTRY)&_ZN8S8310C153v12Ev,
  (VTBL_ENTRY)&_ZN8S8310C153v13Ev,
  (VTBL_ENTRY)&_ZN8S8310C153v14Ev,
  (VTBL_ENTRY)&_ZN8S8310C153v15Ev,
  (VTBL_ENTRY)&_ZN8S8310C153v16Ev,
  (VTBL_ENTRY)&_ZN8S8310C142v1Ev,
  (VTBL_ENTRY)&_ZN8S8310C142v2Ev,
  (VTBL_ENTRY)&_ZN8S8310C142v3Ev,
  (VTBL_ENTRY)&_ZN8S8310C142v4Ev,
  (VTBL_ENTRY)&_ZN8S8310C142v5Ev,
  (VTBL_ENTRY)&_ZN8S8310C142v6Ev,
  (VTBL_ENTRY)&_ZN8S8310C142v7Ev,
  (VTBL_ENTRY)&_ZN8S8310C142v8Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S8310C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S8310C14D1Ev,_ZThn4_N8S8310C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S8310C14D0Ev,_ZThn4_N8S8310C14D0Ev),
  (VTBL_ENTRY)&_ZN8S8310C162v9Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S8310C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S8310C14D1Ev,_ZThn8_N8S8310C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S8310C14D0Ev,_ZThn8_N8S8310C14D0Ev),
  (VTBL_ENTRY)&_ZN8S8310C173v10Ev,
};
extern VTBL_ENTRY _ZTI8S8310C14[];
extern  VTBL_ENTRY _ZTV8S8310C14[];
Class_Descriptor cd_S8310C14 = {  "S8310C14", // class name
  bases_S8310C14, 6,
  &(vtc_S8310C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S8310C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S8310C14),28, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8310C1  : S4055C3_nt {
  ::S8310C3 s8310c1f0;
  ::S8310C5 s8310c1f1;
  ::S8310C11 s8310c1f2;
  ::S8310C12 s8310c1f3;
  ::S8310C14 s8310c1f4;
  void *s8310c1f5;
  void *s8310c1f6;
  virtual  ~S8310C1(); // _ZN7S8310C1D1Ev
  S8310C1(); // tgen
};
//SIG(1 S8310C1) C1{ BC2{ vd m} vd FC3{ m FC4{ Fc[12]}} FC5{ m Fi FU6{ FC7{ Fi} FC8{ Fi} FC9{ Fi Fi} FC10{ Fi}}} FC11{ m Fc[32]} FC12{ BC13{ m Fc[256]}} FC14{ BC15{ BC2 BC16{ BC2 vd v9} BC17{ BC2 vd v10} vd v11 v12 v13 v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi} Fp Fp}


 S8310C1 ::~S8310C1(){ note_dtor("S8310C1", this);}
S8310C1 ::S8310C1(){ note_ctor("S8310C1", this);} // tgen

static void Test_S8310C1()
{
  extern Class_Descriptor cd_S8310C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,86)];
    init_test(&cd_S8310C1, buf);
    S8310C1 *dp, &lv = *(dp=new (buf) S8310C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,340), "sizeof(S8310C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8310C1)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S8310C1");
    check_field_offset(lv, s8310c1f0, ABISELECT(8,4), "S8310C1.s8310c1f0");
    check_field_offset(lv, s8310c1f1, ABISELECT(20,16), "S8310C1.s8310c1f1");
    check_field_offset(lv, s8310c1f2, ABISELECT(32,28), "S8310C1.s8310c1f2");
    check_field_offset(lv, s8310c1f3, ABISELECT(64,60), "S8310C1.s8310c1f3");
    check_field_offset(lv, s8310c1f4, ABISELECT(320,316), "S8310C1.s8310c1f4");
    check_field_offset(lv, s8310c1f5, ABISELECT(352,332), "S8310C1.s8310c1f5");
    check_field_offset(lv, s8310c1f6, ABISELECT(360,336), "S8310C1.s8310c1f6");
    test_class_info(&lv, &cd_S8310C1);
    dp->~S8310C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8310C1(Test_S8310C1, "S8310C1", ABISELECT(368,340));

#else // __cplusplus

extern void _ZN7S8310C1C1Ev();
extern void _ZN7S8310C1D1Ev();
Name_Map name_map_S8310C1[] = {
  NSPAIR(_ZN7S8310C1C1Ev),
  NSPAIR(_ZN7S8310C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S8310C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8310C1[];
extern void _ZN7S8310C1D1Ev();
extern void _ZN7S8310C1D0Ev();
static  VTBL_ENTRY vtc_S8310C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8310C1[0]),
  (VTBL_ENTRY)&_ZN7S8310C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8310C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8310C1[];
extern  VTBL_ENTRY _ZTV7S8310C1[];
Class_Descriptor cd_S8310C1 = {  "S8310C1", // class name
  bases_S8310C1, 1,
  &(vtc_S8310C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,340), // object size
  NSPAIRA(_ZTI7S8310C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8310C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14975C3  {
  int s14975c3f0;
  void *s14975c3f1;
  int s14975c3f2;
  void *s14975c3f3;
  int s14975c3f4;
};
//SIG(1 S14975C3) C1{ Fi Fp Fi Fp Fi}



static void Test_S14975C3()
{
  {
    init_simple_test("S14975C3");
    S14975C3 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S14975C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14975C3)");
    check_field_offset(lv, s14975c3f0, 0, "S14975C3.s14975c3f0");
    check_field_offset(lv, s14975c3f1, ABISELECT(8,4), "S14975C3.s14975c3f1");
    check_field_offset(lv, s14975c3f2, ABISELECT(16,8), "S14975C3.s14975c3f2");
    check_field_offset(lv, s14975c3f3, ABISELECT(24,12), "S14975C3.s14975c3f3");
    check_field_offset(lv, s14975c3f4, ABISELECT(32,16), "S14975C3.s14975c3f4");
  }
}
static Arrange_To_Call_Me vS14975C3(Test_S14975C3, "S14975C3", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14975C5  {
  int s14975c5f0;
  __tsi64 s14975c5f1;
  __tsi64 s14975c5f2;
  int s14975c5f3;
  int s14975c5f4;
  char s14975c5f5;
  void *s14975c5f6;
  int s14975c5f7;
  int s14975c5f8;
};
//SIG(1 S14975C5) C1{ Fi FL[2] Fi[2] Fc Fp Fi[2]}



static void Test_S14975C5()
{
  {
    init_simple_test("S14975C5");
    S14975C5 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S14975C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14975C5)");
    check_field_offset(lv, s14975c5f0, 0, "S14975C5.s14975c5f0");
    check_field_offset(lv, s14975c5f1, ABISELECT(8,4), "S14975C5.s14975c5f1");
    check_field_offset(lv, s14975c5f2, ABISELECT(16,12), "S14975C5.s14975c5f2");
    check_field_offset(lv, s14975c5f3, ABISELECT(24,20), "S14975C5.s14975c5f3");
    check_field_offset(lv, s14975c5f4, ABISELECT(28,24), "S14975C5.s14975c5f4");
    check_field_offset(lv, s14975c5f5, ABISELECT(32,28), "S14975C5.s14975c5f5");
    check_field_offset(lv, s14975c5f6, ABISELECT(40,32), "S14975C5.s14975c5f6");
    check_field_offset(lv, s14975c5f7, ABISELECT(48,36), "S14975C5.s14975c5f7");
    check_field_offset(lv, s14975c5f8, ABISELECT(52,40), "S14975C5.s14975c5f8");
  }
}
static Arrange_To_Call_Me vS14975C5(Test_S14975C5, "S14975C5", ABISELECT(56,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14975C6_nt  {
};
//SIG(1 S14975C6_nt) C1{}



//skip512 S14975C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14975C8  {
  __tsi64 s14975c8f0[20];
  int s14975c8f1;
  int s14975c8f2;
};
//SIG(1 S14975C8) C1{ FL[20] Fi[2]}



static void Test_S14975C8()
{
  {
    init_simple_test("S14975C8");
    S14975C8 lv;
    check2(sizeof(lv), 168, "sizeof(S14975C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14975C8)");
    check_field_offset(lv, s14975c8f0, 0, "S14975C8.s14975c8f0");
    check_field_offset(lv, s14975c8f1, 160, "S14975C8.s14975c8f1");
    check_field_offset(lv, s14975c8f2, 164, "S14975C8.s14975c8f2");
  }
}
static Arrange_To_Call_Me vS14975C8(Test_S14975C8, "S14975C8", 168);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14975C10  {
};
//SIG(-1 S14975C10) C1{}



static void Test_S14975C10()
{
  {
    init_simple_test("S14975C10");
    S14975C10 lv;
    check2(sizeof(lv), 1, "sizeof(S14975C10)");
    check2(__alignof__(lv), 1, "__alignof__(S14975C10)");
  }
}
static Arrange_To_Call_Me vS14975C10(Test_S14975C10, "S14975C10", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14975C14  {
  ::S8715C26_nt s14975c14f0;
};
//SIG(1 S14975C14) C1{ FC2{ Fi[4]}}



static void Test_S14975C14()
{
  {
    init_simple_test("S14975C14");
    S14975C14 lv;
    check2(sizeof(lv), 16, "sizeof(S14975C14)");
    check2(__alignof__(lv), 4, "__alignof__(S14975C14)");
    check_field_offset(lv, s14975c14f0, 0, "S14975C14.s14975c14f0");
  }
}
static Arrange_To_Call_Me vS14975C14(Test_S14975C14, "S14975C14", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14975C16_nt  {
  int s14975c16f0;
  char s14975c16f1;
};
//SIG(1 S14975C16_nt) C1{ Fi Fc}



//skip512 S14975C16_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14975C17_nt  {
  int s14975c17f0;
};
//SIG(-1 S14975C17_nt) C1{ Fi}



//skip512 S14975C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S14975C2  {
  ::S14975C3 s14975c2f0;
  ::S8715C21 s14975c2f1;
  ::S14975C5 s14975c2f2;
  ::S14975C6_nt s14975c2f3;
  ::S14975C6_nt s14975c2f4;
  ::S14975C8 s14975c2f5;
  ::S8715C15 s14975c2f6;
  ::S14975C10 s14975c2f7;
  ::S12844C15_nt s14975c2f8;
  ::S8715C5_nt s14975c2f9;
  ::S8310C10_nt s14975c2f10;
  ::S14975C14 s14975c2f11;
  ::S14975C16_nt s14975c2f12;
  ::S14975C17_nt s14975c2f13;
};
//SIG(1 S14975C2) U1{ FC2{ Fi Fp Fi Fp Fi} FC3{ Fp} FC4{ Fi FL FL Fi Fi Fc Fp Fi Fi} FC5{} FC5 FC6{ FL[20] Fi Fi} FC7{ Fp Fi} FC8{} FC9{ Fi} FC10{ Fi} FC11{ Fi} FC12{ FC13{ Fi Fi Fi Fi}} FC14{ Fi Fc} FC15{ Fi}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S14975C19  {
  __tsi64 s14975c19f0:32;
  __tsi64 s14975c19f1:8;
  __tsi64 s14975c19f2:7;
  __tsu64 s14975c19f3:1;
  __tsi64 s14975c19f4:16;
};
//SIG(1 S14975C19) C1{ FL:32 FL:8 FL:7 FL:1 FL:16}



static void Test_S14975C19()
{
  {
    init_simple_test("S14975C19");
    static S14975C19 lv;
    check2(sizeof(lv), 8, "sizeof(S14975C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14975C19)");
    set_bf_and_test(lv, s14975c19f0, 0, 0, 32, 1, "S14975C19");
    set_bf_and_test(lv, s14975c19f0, 0, 0, 32, hide_sll(1LL<<31), "S14975C19");
    set_bf_and_test(lv, s14975c19f1, 4, 0, 8, 1, "S14975C19");
    set_bf_and_test(lv, s14975c19f1, 4, 0, 8, hide_sll(1LL<<7), "S14975C19");
    set_bf_and_test(lv, s14975c19f2, 5, 0, 7, 1, "S14975C19");
    set_bf_and_test(lv, s14975c19f2, 5, 0, 7, hide_sll(1LL<<6), "S14975C19");
    set_bf_and_test(lv, s14975c19f3, 5, 7, 1, 1, "S14975C19");
    set_bf_and_test(lv, s14975c19f4, 6, 0, 16, 1, "S14975C19");
    set_bf_and_test(lv, s14975c19f4, 6, 0, 16, hide_sll(1LL<<15), "S14975C19");
  }
}
static Arrange_To_Call_Me vS14975C19(Test_S14975C19, "S14975C19", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S14975C18  {
  __tsi64 s14975c18f0;
  ::S14975C19 s14975c18f1;
};
//SIG(1 S14975C18) U1{ FL FC2{ FL:32 FL:8 FL:7 FL:1 FL:16}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S14975C1  {
  ::S14975C2 s14975c1f0;
  ::S14975C18 s14975c1f1;
};
//SIG(1 S14975C1) C1{ FU2{ FC3{ Fi Fp Fi Fp Fi} FC4{ Fp} FC5{ Fi FL FL Fi Fi Fc Fp Fi Fi} FC6{} FC6 FC7{ FL[20] Fi Fi} FC8{ Fp Fi} FC9{} FC10{ Fi} FC11{ Fi} FC12{ Fi} FC13{ FC14{ Fi Fi Fi Fi}} FC15{ Fi Fc} FC16{ Fi}} FU17{ FL FC18{ FL:32 FL:8 FL:7 FL:1 FL:16}}}



static void Test_S14975C1()
{
  {
    init_simple_test("S14975C1");
    S14975C1 lv;
    check2(sizeof(lv), 176, "sizeof(S14975C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14975C1)");
    check_field_offset(lv, s14975c1f0, 0, "S14975C1.s14975c1f0");
    check_field_offset(lv, s14975c1f1, 168, "S14975C1.s14975c1f1");
  }
}
static Arrange_To_Call_Me vS14975C1(Test_S14975C1, "S14975C1", 176);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16932C6_nt  {
  int s16932c6f0[2];
};
//SIG(1 S16932C6_nt) C1{ Fi[2]}



//skip512 S16932C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16932C5  {
  ::S16932C6_nt s16932c5f0[4];
  ::S8663C4_nt s16932c5f1;
  void  mf16932c5(); // _ZN8S16932C59mf16932c5Ev
};
//SIG(-1 S16932C5) C1{ m FC2{ Fi[2]}[4] FC3{ m Fp Fi[2] FC4{ m}}}


void  S16932C5 ::mf16932c5(){}

static void Test_S16932C5()
{
  {
    init_simple_test("S16932C5");
    S16932C5 lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S16932C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16932C5)");
    check_field_offset(lv, s16932c5f0, 0, "S16932C5.s16932c5f0");
    check_field_offset(lv, s16932c5f1, 32, "S16932C5.s16932c5f1");
  }
}
static Arrange_To_Call_Me vS16932C5(Test_S16932C5, "S16932C5", ABISELECT(56,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16932C14  {
  int s16932c14f0;
  void  mf16932c14(); // _ZN9S16932C1410mf16932c14Ev
};
//SIG(-1 S16932C14) C1{ m Fi}


void  S16932C14 ::mf16932c14(){}

static void Test_S16932C14()
{
  {
    init_simple_test("S16932C14");
    S16932C14 lv;
    check2(sizeof(lv), 4, "sizeof(S16932C14)");
    check2(__alignof__(lv), 4, "__alignof__(S16932C14)");
    check_field_offset(lv, s16932c14f0, 0, "S16932C14.s16932c14f0");
  }
}
static Arrange_To_Call_Me vS16932C14(Test_S16932C14, "S16932C14", 4);

#else // __cplusplus

Class_Descriptor cd_S16932C14 = {  "S16932C14", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16932C1  {
  int s16932c1f0;
  void *s16932c1f1;
  int s16932c1f2[2];
  ::S9538C14_nt s16932c1f3;
  int s16932c1f4[2];
  void *s16932c1f5[2];
  ::S2651C3_nt s16932c1f6;
  int s16932c1f7[6];
  char s16932c1f8[4];
  int s16932c1f9[2];
  ::S16932C5 s16932c1f10;
  int s16932c1f11;
  ::S5330C18_nt s16932c1f12;
  void *s16932c1f13[4];
  int s16932c1f14[2];
  ::S5330C34_nt s16932c1f15;
  int s16932c1f16[7];
  char s16932c1f17;
  int s16932c1f18;
  ::S16932C14 s16932c1f19;
  void  mf16932c1(); // _ZN8S16932C19mf16932c1Ev
};
//SIG(1 S16932C1) C1{ m Fi Fp Fi[2] FC2{ m Fp Fi[2] FC3{ m}} Fi[2] Fp[2] FC4{ m Fi} Fi[6] Fc[4] Fi[2] FC5{ m FC6{ Fi[2]}[4] FC7{ m Fp Fi[2] FC3}} Fi FC8{ m FC9{ m Fp Fi FC10{ m}} Fi} Fp[4] Fi[2] FC11{ m Fp Fi[2] FC12{ m}} Fi[7] Fc Fi FC13{ m Fi}}


void  S16932C1 ::mf16932c1(){}

static void Test_S16932C1()
{
  {
    init_simple_test("S16932C1");
    S16932C1 lv;
    check2(sizeof(lv), ABISELECT(304,236), "sizeof(S16932C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16932C1)");
    check_field_offset(lv, s16932c1f0, 0, "S16932C1.s16932c1f0");
    check_field_offset(lv, s16932c1f1, ABISELECT(8,4), "S16932C1.s16932c1f1");
    check_field_offset(lv, s16932c1f2, ABISELECT(16,8), "S16932C1.s16932c1f2");
    check_field_offset(lv, s16932c1f3, ABISELECT(24,16), "S16932C1.s16932c1f3");
    check_field_offset(lv, s16932c1f4, ABISELECT(48,32), "S16932C1.s16932c1f4");
    check_field_offset(lv, s16932c1f5, ABISELECT(56,40), "S16932C1.s16932c1f5");
    check_field_offset(lv, s16932c1f6, ABISELECT(72,48), "S16932C1.s16932c1f6");
    check_field_offset(lv, s16932c1f7, ABISELECT(76,52), "S16932C1.s16932c1f7");
    check_field_offset(lv, s16932c1f8, ABISELECT(100,76), "S16932C1.s16932c1f8");
    check_field_offset(lv, s16932c1f9, ABISELECT(104,80), "S16932C1.s16932c1f9");
    check_field_offset(lv, s16932c1f10, ABISELECT(112,88), "S16932C1.s16932c1f10");
    check_field_offset(lv, s16932c1f11, ABISELECT(168,136), "S16932C1.s16932c1f11");
    check_field_offset(lv, s16932c1f12, ABISELECT(176,140), "S16932C1.s16932c1f12");
    check_field_offset(lv, s16932c1f13, ABISELECT(200,156), "S16932C1.s16932c1f13");
    check_field_offset(lv, s16932c1f14, ABISELECT(232,172), "S16932C1.s16932c1f14");
    check_field_offset(lv, s16932c1f15, ABISELECT(240,180), "S16932C1.s16932c1f15");
    check_field_offset(lv, s16932c1f16, ABISELECT(264,196), "S16932C1.s16932c1f16");
    check_field_offset(lv, s16932c1f17, ABISELECT(292,224), "S16932C1.s16932c1f17");
    check_field_offset(lv, s16932c1f18, ABISELECT(296,228), "S16932C1.s16932c1f18");
    check_field_offset(lv, s16932c1f19, ABISELECT(300,232), "S16932C1.s16932c1f19");
  }
}
static Arrange_To_Call_Me vS16932C1(Test_S16932C1, "S16932C1", ABISELECT(304,236));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21714C2_nt  {
  void *s21714c2f0[3];
  int s21714c2f1;
  char s21714c2f2[32];
};
//SIG(-1 S21714C2_nt) C1{ Fp[3] Fi Fc[32]}



//skip512 S21714C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21714C3  {
  char s21714c3f0[128];
  void *s21714c3f1;
  int s21714c3f2;
  char s21714c3f3[32];
};
//SIG(-1 S21714C3) C1{ Fc[128] Fp Fi Fc[32]}



static void Test_S21714C3()
{
  {
    init_simple_test("S21714C3");
    S21714C3 lv;
    check2(sizeof(lv), ABISELECT(176,168), "sizeof(S21714C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21714C3)");
    check_field_offset(lv, s21714c3f0, 0, "S21714C3.s21714c3f0");
    check_field_offset(lv, s21714c3f1, 128, "S21714C3.s21714c3f1");
    check_field_offset(lv, s21714c3f2, ABISELECT(136,132), "S21714C3.s21714c3f2");
    check_field_offset(lv, s21714c3f3, ABISELECT(140,136), "S21714C3.s21714c3f3");
  }
}
static Arrange_To_Call_Me vS21714C3(Test_S21714C3, "S21714C3", ABISELECT(176,168));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21714C6_nt  {
  short s21714c6f0[6];
  int s21714c6f1;
};
//SIG(-1 S21714C6_nt) C1{ Fs[6] Fi}



//skip512 S21714C6_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21714C5_nt  {
  int s21714c5f0;
  char s21714c5f1[768];
  int s21714c5f2[2];
  ::S21714C6_nt s21714c5f3;
  char s21714c5f4[48];
};
//SIG(-1 S21714C5_nt) C1{ Fi Fc[768] Fi[2] FC2{ Fs[6] Fi} Fc[48]}



//skip512 S21714C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21714C4  {
  int s21714c4f0[2];
  ::S21714C5_nt s21714c4f1;
  ::S21714C2_nt s21714c4f2;
};
//SIG(-1 S21714C4) C1{ Fi[2] FC2{ Fi Fc[768] Fi[2] FC3{ Fs[6] Fi} Fc[48]} FC4{ Fp[3] Fi Fc[32]}}



static void Test_S21714C4()
{
  {
    init_simple_test("S21714C4");
    S21714C4 lv;
    check2(sizeof(lv), ABISELECT(920,900), "sizeof(S21714C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21714C4)");
    check_field_offset(lv, s21714c4f0, 0, "S21714C4.s21714c4f0");
    check_field_offset(lv, s21714c4f1, 8, "S21714C4.s21714c4f1");
    check_field_offset(lv, s21714c4f2, ABISELECT(856,852), "S21714C4.s21714c4f2");
  }
}
static Arrange_To_Call_Me vS21714C4(Test_S21714C4, "S21714C4", ABISELECT(920,900));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21714C10_nt  {
  void *s21714c10f0;
  int s21714c10f1;
  ::S8663C5_nt s21714c10f2;
  void  mf21714c10(); // _ZN12S21714C10_nt10mf21714c10Ev
};
//SIG(-1 S21714C10_nt) C1{ m Fp Fi FC2{ m}}


void  S21714C10_nt ::mf21714c10(){}

//skip512 S21714C10_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21714C9  {
  int s21714c9f0;
  ::S21714C10_nt s21714c9f1;
  ::S21714C10_nt s21714c9f2;
  ::S21714C10_nt s21714c9f3;
  ::S21714C10_nt s21714c9f4;
  ::S5330C19_nt s21714c9f5;
  void *s21714c9f6;
  int s21714c9f7[3];
  ::S21714C6_nt s21714c9f8;
  int s21714c9f9[2];
  void  mf21714c9(); // _ZN8S21714C99mf21714c9Ev
};
//SIG(-1 S21714C9) C1{ m Fi FC2{ m Fp Fi FC3{ m}} FC2 FC2 FC2 FC4{ m Fp Fi FC5{ m}} Fp Fi[3] FC6{ Fs[6] Fi} Fi[2]}


void  S21714C9 ::mf21714c9(){}

static void Test_S21714C9()
{
  {
    init_simple_test("S21714C9");
    S21714C9 lv;
    check2(sizeof(lv), ABISELECT(136,104), "sizeof(S21714C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21714C9)");
    check_field_offset(lv, s21714c9f0, 0, "S21714C9.s21714c9f0");
    check_field_offset(lv, s21714c9f1, ABISELECT(8,4), "S21714C9.s21714c9f1");
    check_field_offset(lv, s21714c9f2, ABISELECT(24,16), "S21714C9.s21714c9f2");
    check_field_offset(lv, s21714c9f3, ABISELECT(40,28), "S21714C9.s21714c9f3");
    check_field_offset(lv, s21714c9f4, ABISELECT(56,40), "S21714C9.s21714c9f4");
    check_field_offset(lv, s21714c9f5, ABISELECT(72,52), "S21714C9.s21714c9f5");
    check_field_offset(lv, s21714c9f6, ABISELECT(88,64), "S21714C9.s21714c9f6");
    check_field_offset(lv, s21714c9f7, ABISELECT(96,68), "S21714C9.s21714c9f7");
    check_field_offset(lv, s21714c9f8, ABISELECT(108,80), "S21714C9.s21714c9f8");
    check_field_offset(lv, s21714c9f9, ABISELECT(124,96), "S21714C9.s21714c9f9");
  }
}
static Arrange_To_Call_Me vS21714C9(Test_S21714C9, "S21714C9", ABISELECT(136,104));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21714C1  {
  void *s21714c1f0;
  ::S21714C2_nt s21714c1f1;
  ::S21714C3 s21714c1f2;
  ::S21714C4 s21714c1f3;
  ::S5330C19_nt s21714c1f4;
  int s21714c1f5;
  ::S21714C9 s21714c1f6;
  ::S5330C19_nt s21714c1f7;
  int s21714c1f8;
  void  mf21714c1(); // _ZN8S21714C19mf21714c1Ev
  virtual  ~S21714C1(); // _ZN8S21714C1D1Ev
  S21714C1(); // tgen
};
//SIG(1 S21714C1) C1{ vd m Fp FC2{ Fp[3] Fi Fc[32]} FC3{ Fc[128] Fp Fi Fc[32]} FC4{ Fi[2] FC5{ Fi Fc[768] Fi[2] FC6{ Fs[6] Fi} Fc[48]} FC2} FC7{ m Fp Fi FC8{ m}} Fi FC9{ m Fi FC10{ m Fp Fi FC11{ m}} FC10 FC10 FC10 FC7 Fp Fi[3] FC6 Fi[2]} FC7 Fi}


void  S21714C1 ::mf21714c1(){}
 S21714C1 ::~S21714C1(){ note_dtor("S21714C1", this);}
S21714C1 ::S21714C1(){ note_ctor("S21714C1", this);} // tgen

static void Test_S21714C1()
{
  extern Class_Descriptor cd_S21714C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(171,316)];
    init_test(&cd_S21714C1, buf);
    S21714C1 *dp, &lv = *(dp=new (buf) S21714C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1360,1260), "sizeof(S21714C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21714C1)");
    check_field_offset(lv, s21714c1f0, ABISELECT(8,4), "S21714C1.s21714c1f0");
    check_field_offset(lv, s21714c1f1, ABISELECT(16,8), "S21714C1.s21714c1f1");
    check_field_offset(lv, s21714c1f2, ABISELECT(80,56), "S21714C1.s21714c1f2");
    check_field_offset(lv, s21714c1f3, ABISELECT(256,224), "S21714C1.s21714c1f3");
    check_field_offset(lv, s21714c1f4, ABISELECT(1176,1124), "S21714C1.s21714c1f4");
    check_field_offset(lv, s21714c1f5, ABISELECT(1192,1136), "S21714C1.s21714c1f5");
    check_field_offset(lv, s21714c1f6, ABISELECT(1200,1140), "S21714C1.s21714c1f6");
    check_field_offset(lv, s21714c1f7, ABISELECT(1336,1244), "S21714C1.s21714c1f7");
    check_field_offset(lv, s21714c1f8, ABISELECT(1352,1256), "S21714C1.s21714c1f8");
    test_class_info(&lv, &cd_S21714C1);
    dp->~S21714C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21714C1(Test_S21714C1, "S21714C1", ABISELECT(1360,1260));

#else // __cplusplus

extern void _ZN8S21714C1C1Ev();
extern void _ZN8S21714C1D1Ev();
Name_Map name_map_S21714C1[] = {
  NSPAIR(_ZN8S21714C1C1Ev),
  NSPAIR(_ZN8S21714C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21714C1[];
extern void _ZN8S21714C1D1Ev();
extern void _ZN8S21714C1D0Ev();
static  VTBL_ENTRY vtc_S21714C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21714C1[0]),
  (VTBL_ENTRY)&_ZN8S21714C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21714C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21714C1[];
extern  VTBL_ENTRY _ZTV8S21714C1[];
Class_Descriptor cd_S21714C1 = {  "S21714C1", // class name
  0,0,//no base classes
  &(vtc_S21714C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1360,1260), // object size
  NSPAIRA(_ZTI8S21714C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21714C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4106C2  : S4055C3_nt {
  ::S8310C3 s4106c2f0;
  int s4106c2f1;
  virtual  ~S4106C2(); // _ZN7S4106C2D1Ev
  virtual void  v6(); // _ZN7S4106C22v6Ev
  virtual void  v7(); // _ZN7S4106C22v7Ev
  virtual void  v8(); // _ZN7S4106C22v8Ev
  virtual void  v9(); // _ZN7S4106C22v9Ev
  virtual void  v10(); // _ZN7S4106C23v10Ev
  S4106C2(); // tgen
};
//SIG(-1 S4106C2) C1{ BC2{ vd m} vd v1 v2 v3 v4 v5 FC3{ m FC4{ Fc[12]}} Fi}


 S4106C2 ::~S4106C2(){ note_dtor("S4106C2", this);}
void  S4106C2 ::v6(){vfunc_called(this, "_ZN7S4106C22v6Ev");}
void  S4106C2 ::v7(){vfunc_called(this, "_ZN7S4106C22v7Ev");}
void  S4106C2 ::v8(){vfunc_called(this, "_ZN7S4106C22v8Ev");}
void  S4106C2 ::v9(){vfunc_called(this, "_ZN7S4106C22v9Ev");}
void  S4106C2 ::v10(){vfunc_called(this, "_ZN7S4106C23v10Ev");}
S4106C2 ::S4106C2(){ note_ctor("S4106C2", this);} // tgen

static void Test_S4106C2()
{
  extern Class_Descriptor cd_S4106C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S4106C2, buf);
    S4106C2 *dp, &lv = *(dp=new (buf) S4106C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S4106C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4106C2)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S4106C2");
    check_field_offset(lv, s4106c2f0, ABISELECT(8,4), "S4106C2.s4106c2f0");
    check_field_offset(lv, s4106c2f1, ABISELECT(20,16), "S4106C2.s4106c2f1");
    test_class_info(&lv, &cd_S4106C2);
    dp->~S4106C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4106C2(Test_S4106C2, "S4106C2", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN7S4106C2C1Ev();
extern void _ZN7S4106C2D1Ev();
Name_Map name_map_S4106C2[] = {
  NSPAIR(_ZN7S4106C2C1Ev),
  NSPAIR(_ZN7S4106C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S4106C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4106C2[];
extern void _ZN7S4106C2D1Ev();
extern void _ZN7S4106C2D0Ev();
extern void _ZN7S4106C22v6Ev();
extern void _ZN7S4106C22v7Ev();
extern void _ZN7S4106C22v8Ev();
extern void _ZN7S4106C22v9Ev();
extern void _ZN7S4106C23v10Ev();
static  VTBL_ENTRY vtc_S4106C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4106C2[0]),
  (VTBL_ENTRY)&_ZN7S4106C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4106C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4106C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4106C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4106C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4106C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4106C23v10Ev,
};
extern VTBL_ENTRY _ZTI7S4106C2[];
extern  VTBL_ENTRY _ZTV7S4106C2[];
Class_Descriptor cd_S4106C2 = {  "S4106C2", // class name
  bases_S4106C2, 1,
  &(vtc_S4106C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI7S4106C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4106C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4106C6  {
  ::S8310C14 s4106c6f0;
  int s4106c6f1;
  void *s4106c6f2[2];
  int s4106c6f3[2];
  void  mf4106c6(); // _ZN7S4106C68mf4106c6Ev
};
//SIG(-1 S4106C6) C1{ m FC2{ BC3{ BC4{ vd m} BC5{ BC4 vd v9} BC6{ BC4 vd v10} vd v11 v12 v13 v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi} Fi Fp[2] Fi[2]}


void  S4106C6 ::mf4106c6(){}

static void Test_S4106C6()
{
  {
    init_simple_test("S4106C6");
    S4106C6 lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S4106C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4106C6)");
    check_field_offset(lv, s4106c6f0, 0, "S4106C6.s4106c6f0");
    check_field_offset(lv, s4106c6f1, ABISELECT(32,16), "S4106C6.s4106c6f1");
    check_field_offset(lv, s4106c6f2, ABISELECT(40,20), "S4106C6.s4106c6f2");
    check_field_offset(lv, s4106c6f3, ABISELECT(56,28), "S4106C6.s4106c6f3");
  }
}
static Arrange_To_Call_Me vS4106C6(Test_S4106C6, "S4106C6", ABISELECT(64,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4106C1  : S4106C2 {
  ::S4106C6 s4106c1f0;
  virtual  ~S4106C1(); // _ZN7S4106C1D1Ev
  virtual void  v1(); // _ZN7S4106C12v1Ev
  virtual void  v2(); // _ZN7S4106C12v2Ev
  virtual void  v3(); // _ZN7S4106C12v3Ev
  virtual void  v4(); // _ZN7S4106C12v4Ev
  virtual void  v5(); // _ZN7S4106C12v5Ev
  S4106C1(); // tgen
};
//SIG(1 S4106C1) C1{ BC2{ BC3{ vd m} vd v6 v7 v8 v9 v10 FC4{ m FC5{ Fc[12]}} Fi} vd v1 v2 v3 v4 v5 FC6{ m FC7{ BC8{ BC3 BC9{ BC3 vd v19} BC10{ BC3 vd v20} vd v21 v22 v23 v24 v25 v26} vd v11 v12 v13 v14 v15 v16 v17 v18 Fi} Fi Fp[2] Fi[2]}}


 S4106C1 ::~S4106C1(){ note_dtor("S4106C1", this);}
void  S4106C1 ::v1(){vfunc_called(this, "_ZN7S4106C12v1Ev");}
void  S4106C1 ::v2(){vfunc_called(this, "_ZN7S4106C12v2Ev");}
void  S4106C1 ::v3(){vfunc_called(this, "_ZN7S4106C12v3Ev");}
void  S4106C1 ::v4(){vfunc_called(this, "_ZN7S4106C12v4Ev");}
void  S4106C1 ::v5(){vfunc_called(this, "_ZN7S4106C12v5Ev");}
S4106C1 ::S4106C1(){ note_ctor("S4106C1", this);} // tgen

static void Test_S4106C1()
{
  extern Class_Descriptor cd_S4106C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S4106C1, buf);
    S4106C1 *dp, &lv = *(dp=new (buf) S4106C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S4106C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4106C1)");
    check_base_class_offset(lv, (S4055C3_nt*)(S4106C2*), 0, "S4106C1");
    check_base_class_offset(lv, (S4106C2*), 0, "S4106C1");
    check_field_offset(lv, s4106c1f0, ABISELECT(24,20), "S4106C1.s4106c1f0");
    test_class_info(&lv, &cd_S4106C1);
    dp->~S4106C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4106C1(Test_S4106C1, "S4106C1", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S4106C1C1Ev();
extern void _ZN7S4106C1D1Ev();
Name_Map name_map_S4106C1[] = {
  NSPAIR(_ZN7S4106C1C1Ev),
  NSPAIR(_ZN7S4106C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4106C2;
extern VTBL_ENTRY _ZTI7S4106C2[];
extern  VTBL_ENTRY _ZTV7S4106C2[];
static Base_Class bases_S4106C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4106C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4106C1[];
extern void _ZN7S4106C1D1Ev();
extern void _ZN7S4106C1D0Ev();
extern void _ZN7S4106C22v6Ev();
extern void _ZN7S4106C22v7Ev();
extern void _ZN7S4106C22v8Ev();
extern void _ZN7S4106C22v9Ev();
extern void _ZN7S4106C23v10Ev();
extern void _ZN7S4106C12v1Ev();
extern void _ZN7S4106C12v2Ev();
extern void _ZN7S4106C12v3Ev();
extern void _ZN7S4106C12v4Ev();
extern void _ZN7S4106C12v5Ev();
static  VTBL_ENTRY vtc_S4106C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4106C1[0]),
  (VTBL_ENTRY)&_ZN7S4106C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4106C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4106C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4106C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4106C22v8Ev,
  (VTBL_ENTRY)&_ZN7S4106C22v9Ev,
  (VTBL_ENTRY)&_ZN7S4106C23v10Ev,
  (VTBL_ENTRY)&_ZN7S4106C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4106C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4106C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4106C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4106C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S4106C1[];
extern  VTBL_ENTRY _ZTV7S4106C1[];
Class_Descriptor cd_S4106C1 = {  "S4106C1", // class name
  bases_S4106C1, 2,
  &(vtc_S4106C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S4106C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4106C1),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1847C5  : S4055C3_nt {
  virtual  ~S1847C5(); // _ZN7S1847C5D1Ev
  virtual void  v2(); // _ZN7S1847C52v2Ev
  S1847C5(); // tgen
};
//SIG(-1 S1847C5) C1{ BC2{ vd m} vd v1}


 S1847C5 ::~S1847C5(){ note_dtor("S1847C5", this);}
void  S1847C5 ::v2(){vfunc_called(this, "_ZN7S1847C52v2Ev");}
S1847C5 ::S1847C5(){ note_ctor("S1847C5", this);} // tgen

static void Test_S1847C5()
{
  extern Class_Descriptor cd_S1847C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1847C5, buf);
    S1847C5 *dp, &lv = *(dp=new (buf) S1847C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1847C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1847C5)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S1847C5");
    test_class_info(&lv, &cd_S1847C5);
    dp->~S1847C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1847C5(Test_S1847C5, "S1847C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1847C5C1Ev();
extern void _ZN7S1847C5D1Ev();
Name_Map name_map_S1847C5[] = {
  NSPAIR(_ZN7S1847C5C1Ev),
  NSPAIR(_ZN7S1847C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S1847C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1847C5[];
extern void _ZN7S1847C5D1Ev();
extern void _ZN7S1847C5D0Ev();
extern void _ZN7S1847C52v2Ev();
static  VTBL_ENTRY vtc_S1847C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1847C5[0]),
  (VTBL_ENTRY)&_ZN7S1847C5D1Ev,
  (VTBL_ENTRY)&_ZN7S1847C5D0Ev,
  (VTBL_ENTRY)&_ZN7S1847C52v2Ev,
};
extern VTBL_ENTRY _ZTI7S1847C5[];
extern  VTBL_ENTRY _ZTV7S1847C5[];
Class_Descriptor cd_S1847C5 = {  "S1847C5", // class name
  bases_S1847C5, 1,
  &(vtc_S1847C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1847C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1847C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1847C6  : S4055C3_nt {
  virtual  ~S1847C6(); // _ZN7S1847C6D1Ev
  virtual void  v3(); // _ZN7S1847C62v3Ev
  S1847C6(); // tgen
};
//SIG(-1 S1847C6) C1{ BC2{ vd m} vd v1}


 S1847C6 ::~S1847C6(){ note_dtor("S1847C6", this);}
void  S1847C6 ::v3(){vfunc_called(this, "_ZN7S1847C62v3Ev");}
S1847C6 ::S1847C6(){ note_ctor("S1847C6", this);} // tgen

static void Test_S1847C6()
{
  extern Class_Descriptor cd_S1847C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S1847C6, buf);
    S1847C6 *dp, &lv = *(dp=new (buf) S1847C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S1847C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1847C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S1847C6");
    test_class_info(&lv, &cd_S1847C6);
    dp->~S1847C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1847C6(Test_S1847C6, "S1847C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S1847C6C1Ev();
extern void _ZN7S1847C6D1Ev();
Name_Map name_map_S1847C6[] = {
  NSPAIR(_ZN7S1847C6C1Ev),
  NSPAIR(_ZN7S1847C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S1847C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1847C6[];
extern void _ZN7S1847C6D1Ev();
extern void _ZN7S1847C6D0Ev();
extern void _ZN7S1847C62v3Ev();
static  VTBL_ENTRY vtc_S1847C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1847C6[0]),
  (VTBL_ENTRY)&_ZN7S1847C6D1Ev,
  (VTBL_ENTRY)&_ZN7S1847C6D0Ev,
  (VTBL_ENTRY)&_ZN7S1847C62v3Ev,
};
extern VTBL_ENTRY _ZTI7S1847C6[];
extern  VTBL_ENTRY _ZTV7S1847C6[];
Class_Descriptor cd_S1847C6 = {  "S1847C6", // class name
  bases_S1847C6, 1,
  &(vtc_S1847C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S1847C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1847C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1847C3  : S4055C3_nt , S1847C5 , S1847C6 {
  virtual  ~S1847C3(); // _ZN7S1847C3D1Ev
  virtual void  v4(); // _ZN7S1847C32v4Ev
  virtual void  v5(); // _ZN7S1847C32v5Ev
  virtual void  v6(); // _ZN7S1847C32v6Ev
  virtual void  v7(); // _ZN7S1847C32v7Ev
  virtual void  v8(); // _ZN7S1847C32v8Ev
  virtual void  v9(); // _ZN7S1847C32v9Ev
  S1847C3(); // tgen
};
//SIG(-1 S1847C3) C1{ BC2{ vd m} BC3{ BC2 vd v7} BC4{ BC2 vd v8} vd v1 v2 v3 v4 v5 v6}


 S1847C3 ::~S1847C3(){ note_dtor("S1847C3", this);}
void  S1847C3 ::v4(){vfunc_called(this, "_ZN7S1847C32v4Ev");}
void  S1847C3 ::v5(){vfunc_called(this, "_ZN7S1847C32v5Ev");}
void  S1847C3 ::v6(){vfunc_called(this, "_ZN7S1847C32v6Ev");}
void  S1847C3 ::v7(){vfunc_called(this, "_ZN7S1847C32v7Ev");}
void  S1847C3 ::v8(){vfunc_called(this, "_ZN7S1847C32v8Ev");}
void  S1847C3 ::v9(){vfunc_called(this, "_ZN7S1847C32v9Ev");}
S1847C3 ::S1847C3(){ note_ctor("S1847C3", this);} // tgen

static void Test_S1847C3()
{
  extern Class_Descriptor cd_S1847C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S1847C3, buf);
    S1847C3 *dp, &lv = *(dp=new (buf) S1847C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S1847C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1847C3)");
    /*is_ambiguous_... S1847C3::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S1847C3");
    check_base_class_offset(lv, (S4055C3_nt*)(S1847C5*), ABISELECT(8,4), "S1847C3");
    check_base_class_offset(lv, (S1847C5*), ABISELECT(8,4), "S1847C3");
    check_base_class_offset(lv, (S4055C3_nt*)(S1847C6*), ABISELECT(16,8), "S1847C3");
    check_base_class_offset(lv, (S1847C6*), ABISELECT(16,8), "S1847C3");
    test_class_info(&lv, &cd_S1847C3);
    dp->~S1847C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1847C3(Test_S1847C3, "S1847C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S1847C3C1Ev();
extern void _ZN7S1847C3D1Ev();
Name_Map name_map_S1847C3[] = {
  NSPAIR(_ZN7S1847C3C1Ev),
  NSPAIR(_ZN7S1847C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S1847C5;
extern VTBL_ENTRY _ZTI7S1847C5[];
extern  VTBL_ENTRY _ZTV7S1847C5[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S1847C6;
extern VTBL_ENTRY _ZTI7S1847C6[];
extern  VTBL_ENTRY _ZTV7S1847C6[];
static Base_Class bases_S1847C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1847C5,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1847C6,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1847C3[];
extern void _ZN7S1847C3D1Ev();
extern void _ZN7S1847C3D0Ev();
extern void _ZN7S1847C32v4Ev();
extern void _ZN7S1847C32v5Ev();
extern void _ZN7S1847C32v6Ev();
extern void _ZN7S1847C32v7Ev();
extern void _ZN7S1847C32v8Ev();
extern void _ZN7S1847C32v9Ev();
extern void ABISELECT(_ZThn8_N7S1847C3D1Ev,_ZThn4_N7S1847C3D1Ev)();
extern void ABISELECT(_ZThn8_N7S1847C3D0Ev,_ZThn4_N7S1847C3D0Ev)();
extern void _ZN7S1847C52v2Ev();
extern void ABISELECT(_ZThn16_N7S1847C3D1Ev,_ZThn8_N7S1847C3D1Ev)();
extern void ABISELECT(_ZThn16_N7S1847C3D0Ev,_ZThn8_N7S1847C3D0Ev)();
extern void _ZN7S1847C62v3Ev();
static  VTBL_ENTRY vtc_S1847C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1847C3[0]),
  (VTBL_ENTRY)&_ZN7S1847C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1847C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v9Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1847C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1847C3D1Ev,_ZThn4_N7S1847C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1847C3D0Ev,_ZThn4_N7S1847C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1847C52v2Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1847C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1847C3D1Ev,_ZThn8_N7S1847C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1847C3D0Ev,_ZThn8_N7S1847C3D0Ev),
  (VTBL_ENTRY)&_ZN7S1847C62v3Ev,
};
extern VTBL_ENTRY _ZTI7S1847C3[];
extern  VTBL_ENTRY _ZTV7S1847C3[];
Class_Descriptor cd_S1847C3 = {  "S1847C3", // class name
  bases_S1847C3, 5,
  &(vtc_S1847C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S1847C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S1847C3),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1847C2  : S1847C3 {
  ::S8310C14 s1847c2f0;
  void *s1847c2f1;
  virtual  ~S1847C2(); // _ZN7S1847C2D1Ev
  virtual void  v10(); // _ZN7S1847C23v10Ev
  virtual void  v11(); // _ZN7S1847C23v11Ev
  virtual void  v12(); // _ZN7S1847C23v12Ev
  virtual void  v13(); // _ZN7S1847C23v13Ev
  virtual void  v14(); // _ZN7S1847C23v14Ev
  virtual void  v15(); // _ZN7S1847C23v15Ev
  virtual void  v16(); // _ZN7S1847C23v16Ev
  virtual void  v17(); // _ZN7S1847C23v17Ev
  S1847C2(); // tgen
};
//SIG(-1 S1847C2) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v9} BC5{ BC3 vd v10} vd v11 v12 v13 v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 FC6{ BC7{ BC3 BC8{ BC3 vd v25} BC9{ BC3 vd v26} vd v27 v28 v29 v30 v31 v32} vd v17 v18 v19 v20 v21 v22 v23 v24 Fi} Fp}


 S1847C2 ::~S1847C2(){ note_dtor("S1847C2", this);}
void  S1847C2 ::v10(){vfunc_called(this, "_ZN7S1847C23v10Ev");}
void  S1847C2 ::v11(){vfunc_called(this, "_ZN7S1847C23v11Ev");}
void  S1847C2 ::v12(){vfunc_called(this, "_ZN7S1847C23v12Ev");}
void  S1847C2 ::v13(){vfunc_called(this, "_ZN7S1847C23v13Ev");}
void  S1847C2 ::v14(){vfunc_called(this, "_ZN7S1847C23v14Ev");}
void  S1847C2 ::v15(){vfunc_called(this, "_ZN7S1847C23v15Ev");}
void  S1847C2 ::v16(){vfunc_called(this, "_ZN7S1847C23v16Ev");}
void  S1847C2 ::v17(){vfunc_called(this, "_ZN7S1847C23v17Ev");}
S1847C2 ::S1847C2(){ note_ctor("S1847C2", this);} // tgen

static void Test_S1847C2()
{
  extern Class_Descriptor cd_S1847C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S1847C2, buf);
    S1847C2 *dp, &lv = *(dp=new (buf) S1847C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S1847C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1847C2)");
    /*is_ambiguous_... S1847C3::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S1847C3*), 0, "S1847C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S1847C5*)(S1847C3*), ABISELECT(8,4), "S1847C2");
    check_base_class_offset(lv, (S1847C5*)(S1847C3*), ABISELECT(8,4), "S1847C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S1847C6*)(S1847C3*), ABISELECT(16,8), "S1847C2");
    check_base_class_offset(lv, (S1847C6*)(S1847C3*), ABISELECT(16,8), "S1847C2");
    check_base_class_offset(lv, (S1847C3*), 0, "S1847C2");
    check_field_offset(lv, s1847c2f0, ABISELECT(24,12), "S1847C2.s1847c2f0");
    check_field_offset(lv, s1847c2f1, ABISELECT(56,28), "S1847C2.s1847c2f1");
    test_class_info(&lv, &cd_S1847C2);
    dp->~S1847C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1847C2(Test_S1847C2, "S1847C2", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN7S1847C2C1Ev();
extern void _ZN7S1847C2D1Ev();
Name_Map name_map_S1847C2[] = {
  NSPAIR(_ZN7S1847C2C1Ev),
  NSPAIR(_ZN7S1847C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S1847C5;
extern VTBL_ENTRY _ZTI7S1847C5[];
extern  VTBL_ENTRY _ZTV7S1847C5[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S1847C6;
extern VTBL_ENTRY _ZTI7S1847C6[];
extern  VTBL_ENTRY _ZTV7S1847C6[];
extern Class_Descriptor cd_S1847C3;
extern VTBL_ENTRY _ZTI7S1847C3[];
extern  VTBL_ENTRY _ZTV7S1847C3[];
static Base_Class bases_S1847C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1847C5,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1847C6,    ABISELECT(16,8), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1847C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1847C2[];
extern void _ZN7S1847C2D1Ev();
extern void _ZN7S1847C2D0Ev();
extern void _ZN7S1847C32v4Ev();
extern void _ZN7S1847C32v5Ev();
extern void _ZN7S1847C32v6Ev();
extern void _ZN7S1847C32v7Ev();
extern void _ZN7S1847C32v8Ev();
extern void _ZN7S1847C32v9Ev();
extern void _ZN7S1847C23v10Ev();
extern void _ZN7S1847C23v11Ev();
extern void _ZN7S1847C23v12Ev();
extern void _ZN7S1847C23v13Ev();
extern void _ZN7S1847C23v14Ev();
extern void _ZN7S1847C23v15Ev();
extern void _ZN7S1847C23v16Ev();
extern void _ZN7S1847C23v17Ev();
extern void ABISELECT(_ZThn8_N7S1847C2D1Ev,_ZThn4_N7S1847C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S1847C2D0Ev,_ZThn4_N7S1847C2D0Ev)();
extern void _ZN7S1847C52v2Ev();
extern void ABISELECT(_ZThn16_N7S1847C2D1Ev,_ZThn8_N7S1847C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S1847C2D0Ev,_ZThn8_N7S1847C2D0Ev)();
extern void _ZN7S1847C62v3Ev();
static  VTBL_ENTRY vtc_S1847C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1847C2[0]),
  (VTBL_ENTRY)&_ZN7S1847C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1847C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v17Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1847C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1847C2D1Ev,_ZThn4_N7S1847C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1847C2D0Ev,_ZThn4_N7S1847C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1847C52v2Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1847C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1847C2D1Ev,_ZThn8_N7S1847C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1847C2D0Ev,_ZThn8_N7S1847C2D0Ev),
  (VTBL_ENTRY)&_ZN7S1847C62v3Ev,
};
extern VTBL_ENTRY _ZTI7S1847C2[];
extern  VTBL_ENTRY _ZTV7S1847C2[];
Class_Descriptor cd_S1847C2 = {  "S1847C2", // class name
  bases_S1847C2, 6,
  &(vtc_S1847C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI7S1847C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1847C2),28, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1847C8_nt  : S1847C5 {
  void *s1847c8f0;
  int s1847c8f1[2];
  ::S4055C12_nt s1847c8f2;
  void *s1847c8f3;
  virtual  ~S1847C8_nt(); // _ZN10S1847C8_ntD1Ev
  virtual void  v26(); // _ZN10S1847C8_nt3v26Ev
  S1847C8_nt(); // tgen
};
//SIG(-1 S1847C8_nt) C1{ BC2{ BC3{ vd m} vd v2} vd v1 Fp Fi[2] FC4{ m Fp Fi[2]} Fp}


 S1847C8_nt ::~S1847C8_nt(){ note_dtor("S1847C8_nt", this);}
void  S1847C8_nt ::v26(){vfunc_called(this, "_ZN10S1847C8_nt3v26Ev");}
S1847C8_nt ::S1847C8_nt(){ note_ctor("S1847C8_nt", this);} // tgen

//skip512 S1847C8_nt

#else // __cplusplus

extern void _ZN10S1847C8_ntC1Ev();
extern void _ZN10S1847C8_ntD1Ev();
Name_Map name_map_S1847C8_nt[] = {
  NSPAIR(_ZN10S1847C8_ntC1Ev),
  NSPAIR(_ZN10S1847C8_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S1847C5;
extern VTBL_ENTRY _ZTI7S1847C5[];
extern  VTBL_ENTRY _ZTV7S1847C5[];
static Base_Class bases_S1847C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S1847C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S1847C8_nt[];
extern void _ZN10S1847C8_ntD1Ev();
extern void _ZN10S1847C8_ntD0Ev();
extern void _ZN7S1847C52v2Ev();
extern void _ZN10S1847C8_nt3v26Ev();
static  VTBL_ENTRY vtc_S1847C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1847C8_nt[0]),
  (VTBL_ENTRY)&_ZN10S1847C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1847C8_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1847C52v2Ev,
  (VTBL_ENTRY)&_ZN10S1847C8_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI10S1847C8_nt[];
VTBL_ENTRY *P__ZTI10S1847C8_nt = _ZTI10S1847C8_nt; 
extern  VTBL_ENTRY _ZTV10S1847C8_nt[];
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S1847C1  : S1847C2 {
  ::S1847C8_nt s1847c1f0;
  virtual  ~S1847C1(); // _ZN7S1847C1D1Ev
  virtual void  v1(); // _ZN7S1847C12v1Ev
  S1847C1(); // tgen
};
//SIG(1 S1847C1) C1{ BC2{ BC3{ BC4{ vd m} BC5{ BC4 vd v2} BC6{ BC4 vd v3} vd v4 v5 v6 v7 v8 v9} vd v10 v11 v12 v13 v14 v15 v16 v17 FC7{ BC8{ BC4 BC9{ BC4 vd v26} BC10{ BC4 vd v27} vd v28 v29 v30 v31 v32 v33} vd v18 v19 v20 v21 v22 v23 v24 v25 Fi} Fp} vd v1 FC11{ BC5 vd v34 Fp Fi[2] FC12{ m Fp Fi[2]} Fp}}


 S1847C1 ::~S1847C1(){ note_dtor("S1847C1", this);}
void  S1847C1 ::v1(){vfunc_called(this, "_ZN7S1847C12v1Ev");}
S1847C1 ::S1847C1(){ note_ctor("S1847C1", this);} // tgen

static void Test_S1847C1()
{
  extern Class_Descriptor cd_S1847C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,17)];
    init_test(&cd_S1847C1, buf);
    S1847C1 *dp, &lv = *(dp=new (buf) S1847C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,64), "sizeof(S1847C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1847C1)");
    /*is_ambiguous_... S1847C3::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S1847C3*)(S1847C2*), 0, "S1847C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S1847C5*)(S1847C3*)(S1847C2*), ABISELECT(8,4), "S1847C1");
    check_base_class_offset(lv, (S1847C5*)(S1847C3*)(S1847C2*), ABISELECT(8,4), "S1847C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S1847C6*)(S1847C3*)(S1847C2*), ABISELECT(16,8), "S1847C1");
    check_base_class_offset(lv, (S1847C6*)(S1847C3*)(S1847C2*), ABISELECT(16,8), "S1847C1");
    check_base_class_offset(lv, (S1847C3*)(S1847C2*), 0, "S1847C1");
    check_base_class_offset(lv, (S1847C2*), 0, "S1847C1");
    check_field_offset(lv, s1847c1f0, ABISELECT(64,32), "S1847C1.s1847c1f0");
    test_class_info(&lv, &cd_S1847C1);
    dp->~S1847C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1847C1(Test_S1847C1, "S1847C1", ABISELECT(112,64));

#else // __cplusplus

extern void _ZN7S1847C1C1Ev();
extern void _ZN7S1847C1D1Ev();
Name_Map name_map_S1847C1[] = {
  NSPAIR(_ZN7S1847C1C1Ev),
  NSPAIR(_ZN7S1847C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S1847C5;
extern VTBL_ENTRY _ZTI7S1847C5[];
extern  VTBL_ENTRY _ZTV7S1847C5[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S1847C6;
extern VTBL_ENTRY _ZTI7S1847C6[];
extern  VTBL_ENTRY _ZTV7S1847C6[];
extern Class_Descriptor cd_S1847C3;
extern VTBL_ENTRY _ZTI7S1847C3[];
extern  VTBL_ENTRY _ZTV7S1847C3[];
extern Class_Descriptor cd_S1847C2;
extern VTBL_ENTRY _ZTI7S1847C2[];
extern  VTBL_ENTRY _ZTV7S1847C2[];
static Base_Class bases_S1847C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S1847C5,    ABISELECT(8,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1847C6,    ABISELECT(16,8), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S1847C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S1847C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S1847C1[];
extern void _ZN7S1847C1D1Ev();
extern void _ZN7S1847C1D0Ev();
extern void _ZN7S1847C32v4Ev();
extern void _ZN7S1847C32v5Ev();
extern void _ZN7S1847C32v6Ev();
extern void _ZN7S1847C32v7Ev();
extern void _ZN7S1847C32v8Ev();
extern void _ZN7S1847C32v9Ev();
extern void _ZN7S1847C23v10Ev();
extern void _ZN7S1847C23v11Ev();
extern void _ZN7S1847C23v12Ev();
extern void _ZN7S1847C23v13Ev();
extern void _ZN7S1847C23v14Ev();
extern void _ZN7S1847C23v15Ev();
extern void _ZN7S1847C23v16Ev();
extern void _ZN7S1847C23v17Ev();
extern void _ZN7S1847C12v1Ev();
extern void ABISELECT(_ZThn8_N7S1847C1D1Ev,_ZThn4_N7S1847C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S1847C1D0Ev,_ZThn4_N7S1847C1D0Ev)();
extern void _ZN7S1847C52v2Ev();
extern void ABISELECT(_ZThn16_N7S1847C1D1Ev,_ZThn8_N7S1847C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S1847C1D0Ev,_ZThn8_N7S1847C1D0Ev)();
extern void _ZN7S1847C62v3Ev();
static  VTBL_ENTRY vtc_S1847C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1847C1[0]),
  (VTBL_ENTRY)&_ZN7S1847C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1847C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v4Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v5Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v6Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v7Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v8Ev,
  (VTBL_ENTRY)&_ZN7S1847C32v9Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v10Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v11Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v12Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v13Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v14Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v15Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v16Ev,
  (VTBL_ENTRY)&_ZN7S1847C23v17Ev,
  (VTBL_ENTRY)&_ZN7S1847C12v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S1847C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1847C1D1Ev,_ZThn4_N7S1847C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S1847C1D0Ev,_ZThn4_N7S1847C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1847C52v2Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S1847C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1847C1D1Ev,_ZThn8_N7S1847C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S1847C1D0Ev,_ZThn8_N7S1847C1D0Ev),
  (VTBL_ENTRY)&_ZN7S1847C62v3Ev,
};
extern VTBL_ENTRY _ZTI7S1847C1[];
extern  VTBL_ENTRY _ZTV7S1847C1[];
Class_Descriptor cd_S1847C1 = {  "S1847C1", // class name
  bases_S1847C1, 7,
  &(vtc_S1847C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,64), // object size
  NSPAIRA(_ZTI7S1847C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1847C1),29, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9670C2  {
  ::S21714C10_nt s9670c2f0;
  int s9670c2f1[2];
  char s9670c2f2;
  virtual  ~S9670C2(); // _ZN7S9670C2D1Ev
  virtual void  v4(); // _ZN7S9670C22v4Ev
  virtual void  v5(); // _ZN7S9670C22v5Ev
  virtual void  v6(); // _ZN7S9670C22v6Ev
  S9670C2(); // tgen
};
//SIG(-1 S9670C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9670C2 ::~S9670C2(){ note_dtor("S9670C2", this);}
void  S9670C2 ::v4(){vfunc_called(this, "_ZN7S9670C22v4Ev");}
void  S9670C2 ::v5(){vfunc_called(this, "_ZN7S9670C22v5Ev");}
void  S9670C2 ::v6(){vfunc_called(this, "_ZN7S9670C22v6Ev");}
S9670C2 ::S9670C2(){ note_ctor("S9670C2", this);} // tgen

static void Test_S9670C2()
{
  extern Class_Descriptor cd_S9670C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9670C2, buf);
    S9670C2 *dp, &lv = *(dp=new (buf) S9670C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9670C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9670C2)");
    check_field_offset(lv, s9670c2f0, ABISELECT(8,4), "S9670C2.s9670c2f0");
    check_field_offset(lv, s9670c2f1, ABISELECT(24,16), "S9670C2.s9670c2f1");
    check_field_offset(lv, s9670c2f2, ABISELECT(32,24), "S9670C2.s9670c2f2");
    test_class_info(&lv, &cd_S9670C2);
    dp->~S9670C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9670C2(Test_S9670C2, "S9670C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9670C2C1Ev();
extern void _ZN7S9670C2D1Ev();
Name_Map name_map_S9670C2[] = {
  NSPAIR(_ZN7S9670C2C1Ev),
  NSPAIR(_ZN7S9670C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9670C2[];
extern void _ZN7S9670C2D1Ev();
extern void _ZN7S9670C2D0Ev();
extern void _ZN7S9670C22v4Ev();
extern void _ZN7S9670C22v5Ev();
extern void _ZN7S9670C22v6Ev();
static  VTBL_ENTRY vtc_S9670C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9670C2[0]),
  (VTBL_ENTRY)&_ZN7S9670C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9670C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9670C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9670C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9670C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S9670C2[];
extern  VTBL_ENTRY _ZTV7S9670C2[];
Class_Descriptor cd_S9670C2 = {  "S9670C2", // class name
  0,0,//no base classes
  &(vtc_S9670C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9670C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9670C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9670C5  {
  char s9670c5f0;
  __tsi64 s9670c5f1;
  void  mf9670c5(); // _ZN7S9670C58mf9670c5Ev
  virtual  ~S9670C5(); // _ZN7S9670C5D1Ev
  S9670C5(); // tgen
};
//SIG(-1 S9670C5) C1{ vd m Fc FL}


void  S9670C5 ::mf9670c5(){}
 S9670C5 ::~S9670C5(){ note_dtor("S9670C5", this);}
S9670C5 ::S9670C5(){ note_ctor("S9670C5", this);} // tgen

static void Test_S9670C5()
{
  extern Class_Descriptor cd_S9670C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S9670C5, buf);
    S9670C5 *dp, &lv = *(dp=new (buf) S9670C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S9670C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9670C5)");
    check_field_offset(lv, s9670c5f0, ABISELECT(8,4), "S9670C5.s9670c5f0");
    check_field_offset(lv, s9670c5f1, ABISELECT(16,8), "S9670C5.s9670c5f1");
    test_class_info(&lv, &cd_S9670C5);
    dp->~S9670C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9670C5(Test_S9670C5, "S9670C5", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S9670C5C1Ev();
extern void _ZN7S9670C5D1Ev();
Name_Map name_map_S9670C5[] = {
  NSPAIR(_ZN7S9670C5C1Ev),
  NSPAIR(_ZN7S9670C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9670C5[];
extern void _ZN7S9670C5D1Ev();
extern void _ZN7S9670C5D0Ev();
static  VTBL_ENTRY vtc_S9670C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9670C5[0]),
  (VTBL_ENTRY)&_ZN7S9670C5D1Ev,
  (VTBL_ENTRY)&_ZN7S9670C5D0Ev,
};
extern VTBL_ENTRY _ZTI7S9670C5[];
extern  VTBL_ENTRY _ZTV7S9670C5[];
Class_Descriptor cd_S9670C5 = {  "S9670C5", // class name
  0,0,//no base classes
  &(vtc_S9670C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S9670C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9670C5),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9670C7_nt  {
  void *s9670c7f0[2];
  void  mf9670c7(); // _ZN10S9670C7_nt8mf9670c7Ev
};
//SIG(-1 S9670C7_nt) C1{ m Fp[2]}


void  S9670C7_nt ::mf9670c7(){}

//skip512 S9670C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9670C8  {
  ::S21714C10_nt s9670c8f0;
  int s9670c8f1[3];
  ::S21714C10_nt s9670c8f2;
  ::S21714C10_nt s9670c8f3;
  ::S21714C10_nt s9670c8f4;
  ::S21714C10_nt s9670c8f5;
  char s9670c8f6;
  ::S21714C10_nt s9670c8f7;
  __tsi64 s9670c8f8;
  void  mf9670c8(); // _ZN7S9670C88mf9670c8Ev
};
//SIG(1 S9670C8) C1{ m FC2{ m Fp Fi FC3{ m}} Fi[3] FC2 FC2 FC2 FC2 Fc FC2 FL}


void  S9670C8 ::mf9670c8(){}

static void Test_S9670C8()
{
  {
    init_simple_test("S9670C8");
    S9670C8 lv;
    check2(sizeof(lv), ABISELECT(128,96), "sizeof(S9670C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9670C8)");
    check_field_offset(lv, s9670c8f0, 0, "S9670C8.s9670c8f0");
    check_field_offset(lv, s9670c8f1, ABISELECT(16,12), "S9670C8.s9670c8f1");
    check_field_offset(lv, s9670c8f2, ABISELECT(32,24), "S9670C8.s9670c8f2");
    check_field_offset(lv, s9670c8f3, ABISELECT(48,36), "S9670C8.s9670c8f3");
    check_field_offset(lv, s9670c8f4, ABISELECT(64,48), "S9670C8.s9670c8f4");
    check_field_offset(lv, s9670c8f5, ABISELECT(80,60), "S9670C8.s9670c8f5");
    check_field_offset(lv, s9670c8f6, ABISELECT(96,72), "S9670C8.s9670c8f6");
    check_field_offset(lv, s9670c8f7, ABISELECT(104,76), "S9670C8.s9670c8f7");
    check_field_offset(lv, s9670c8f8, ABISELECT(120,88), "S9670C8.s9670c8f8");
  }
}
static Arrange_To_Call_Me vS9670C8(Test_S9670C8, "S9670C8", ABISELECT(128,96));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9670C9  {
  ::S21714C10_nt s9670c9f0;
  int s9670c9f1;
  ::S21714C10_nt s9670c9f2;
  char s9670c9f3;
  void  mf9670c9(); // _ZN7S9670C98mf9670c9Ev
};
//SIG(1 S9670C9) C1{ m FC2{ m Fp Fi FC3{ m}} Fi FC2 Fc}


void  S9670C9 ::mf9670c9(){}

static void Test_S9670C9()
{
  {
    init_simple_test("S9670C9");
    S9670C9 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S9670C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9670C9)");
    check_field_offset(lv, s9670c9f0, 0, "S9670C9.s9670c9f0");
    check_field_offset(lv, s9670c9f1, ABISELECT(16,12), "S9670C9.s9670c9f1");
    check_field_offset(lv, s9670c9f2, ABISELECT(24,16), "S9670C9.s9670c9f2");
    check_field_offset(lv, s9670c9f3, ABISELECT(40,28), "S9670C9.s9670c9f3");
  }
}
static Arrange_To_Call_Me vS9670C9(Test_S9670C9, "S9670C9", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9670C6  {
  void *s9670c6f0;
  int s9670c6f1[3];
  ::S9670C7_nt s9670c6f2;
  ::S9670C8 s9670c6f3[10];
  ::S9670C9 s9670c6f4[10];
  char s9670c6f5;
  void  mf9670c6(); // _ZN7S9670C68mf9670c6Ev
};
//SIG(-1 S9670C6) C1{ m Fp Fi[3] FC2{ m Fp[2]} FC3{ m FC4{ m Fp Fi FC5{ m}} Fi[3] FC4 FC4 FC4 FC4 Fc FC4 FL}[10] FC6{ m FC4 Fi FC4 Fc}[10] Fc}


void  S9670C6 ::mf9670c6(){}

static void Test_S9670C6()
{
  {
    init_simple_test("S9670C6");
    S9670C6 lv;
    check2(sizeof(lv), ABISELECT(1808,1308), "sizeof(S9670C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9670C6)");
    check_field_offset(lv, s9670c6f0, 0, "S9670C6.s9670c6f0");
    check_field_offset(lv, s9670c6f1, ABISELECT(8,4), "S9670C6.s9670c6f1");
    check_field_offset(lv, s9670c6f2, ABISELECT(24,16), "S9670C6.s9670c6f2");
    check_field_offset(lv, s9670c6f3, ABISELECT(40,24), "S9670C6.s9670c6f3");
    check_field_offset(lv, s9670c6f4, ABISELECT(1320,984), "S9670C6.s9670c6f4");
    check_field_offset(lv, s9670c6f5, ABISELECT(1800,1304), "S9670C6.s9670c6f5");
  }
}
static Arrange_To_Call_Me vS9670C6(Test_S9670C6, "S9670C6", ABISELECT(1808,1308));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9670C1  : S9670C2 {
  ::S9670C5 s9670c1f0;
  ::S9670C6 s9670c1f1;
  void *s9670c1f2[6];
  int s9670c1f3[2];
  ::S8663C5_nt s9670c1f4;
  virtual  ~S9670C1(); // _ZN7S9670C1D1Ev
  virtual void  v1(); // _ZN7S9670C12v1Ev
  virtual void  v2(); // _ZN7S9670C12v2Ev
  virtual void  v3(); // _ZN7S9670C12v3Ev
  S9670C1(); // tgen
};
//SIG(1 S9670C1) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 FC5{ vd m Fc FL} FC6{ m Fp Fi[3] FC7{ m Fp[2]} FC8{ m FC3 Fi[3] FC3 FC3 FC3 FC3 Fc FC3 FL}[10] FC9{ m FC3 Fi FC3 Fc}[10] Fc} Fp[6] Fi[2] FC4}


 S9670C1 ::~S9670C1(){ note_dtor("S9670C1", this);}
void  S9670C1 ::v1(){vfunc_called(this, "_ZN7S9670C12v1Ev");}
void  S9670C1 ::v2(){vfunc_called(this, "_ZN7S9670C12v2Ev");}
void  S9670C1 ::v3(){vfunc_called(this, "_ZN7S9670C12v3Ev");}
S9670C1 ::S9670C1(){ note_ctor("S9670C1", this);} // tgen

static void Test_S9670C1()
{
  extern Class_Descriptor cd_S9670C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(243,348)];
    init_test(&cd_S9670C1, buf);
    S9670C1 *dp, &lv = *(dp=new (buf) S9670C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1936,1388), "sizeof(S9670C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9670C1)");
    check_base_class_offset(lv, (S9670C2*), 0, "S9670C1");
    check_field_offset(lv, s9670c1f0, ABISELECT(40,28), "S9670C1.s9670c1f0");
    check_field_offset(lv, s9670c1f1, ABISELECT(64,44), "S9670C1.s9670c1f1");
    check_field_offset(lv, s9670c1f2, ABISELECT(1872,1352), "S9670C1.s9670c1f2");
    check_field_offset(lv, s9670c1f3, ABISELECT(1920,1376), "S9670C1.s9670c1f3");
    check_field_offset(lv, s9670c1f4, ABISELECT(1928,1384), "S9670C1.s9670c1f4");
    test_class_info(&lv, &cd_S9670C1);
    dp->~S9670C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9670C1(Test_S9670C1, "S9670C1", ABISELECT(1936,1388));

#else // __cplusplus

extern void _ZN7S9670C1C1Ev();
extern void _ZN7S9670C1D1Ev();
Name_Map name_map_S9670C1[] = {
  NSPAIR(_ZN7S9670C1C1Ev),
  NSPAIR(_ZN7S9670C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9670C2;
extern VTBL_ENTRY _ZTI7S9670C2[];
extern  VTBL_ENTRY _ZTV7S9670C2[];
static Base_Class bases_S9670C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9670C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9670C1[];
extern void _ZN7S9670C1D1Ev();
extern void _ZN7S9670C1D0Ev();
extern void _ZN7S9670C22v4Ev();
extern void _ZN7S9670C22v5Ev();
extern void _ZN7S9670C22v6Ev();
extern void _ZN7S9670C12v1Ev();
extern void _ZN7S9670C12v2Ev();
extern void _ZN7S9670C12v3Ev();
static  VTBL_ENTRY vtc_S9670C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9670C1[0]),
  (VTBL_ENTRY)&_ZN7S9670C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9670C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9670C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9670C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9670C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9670C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9670C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9670C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S9670C1[];
extern  VTBL_ENTRY _ZTV7S9670C1[];
Class_Descriptor cd_S9670C1 = {  "S9670C1", // class name
  bases_S9670C1, 1,
  &(vtc_S9670C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1936,1388), // object size
  NSPAIRA(_ZTI7S9670C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9670C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15054C6  {
  int s15054c6f0[2];
  __tsi64 s15054c6f1;
  void  mf15054c6(); // _ZN8S15054C69mf15054c6Ev
};
//SIG(-1 S15054C6) C1{ m Fi[2] FL}


void  S15054C6 ::mf15054c6(){}

static void Test_S15054C6()
{
  {
    init_simple_test("S15054C6");
    S15054C6 lv;
    check2(sizeof(lv), 16, "sizeof(S15054C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15054C6)");
    check_field_offset(lv, s15054c6f0, 0, "S15054C6.s15054c6f0");
    check_field_offset(lv, s15054c6f1, 8, "S15054C6.s15054c6f1");
  }
}
static Arrange_To_Call_Me vS15054C6(Test_S15054C6, "S15054C6", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15054C8  {
  char s15054c8f0[20];
  void  mf15054c8(); // _ZN8S15054C89mf15054c8Ev
};
//SIG(-1 S15054C8) C1{ m Fc[20]}


void  S15054C8 ::mf15054c8(){}

static void Test_S15054C8()
{
  {
    init_simple_test("S15054C8");
    S15054C8 lv;
    check2(sizeof(lv), 20, "sizeof(S15054C8)");
    check2(__alignof__(lv), 1, "__alignof__(S15054C8)");
    check_field_offset(lv, s15054c8f0, 0, "S15054C8.s15054c8f0");
  }
}
static Arrange_To_Call_Me vS15054C8(Test_S15054C8, "S15054C8", 20);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15054C7  {
  int s15054c7f0[2];
  ::S15054C8 s15054c7f1;
  void  mf15054c7(); // _ZN8S15054C79mf15054c7Ev
};
//SIG(-1 S15054C7) C1{ m Fi[2] FC2{ m Fc[20]}}


void  S15054C7 ::mf15054c7(){}

static void Test_S15054C7()
{
  {
    init_simple_test("S15054C7");
    S15054C7 lv;
    check2(sizeof(lv), 28, "sizeof(S15054C7)");
    check2(__alignof__(lv), 4, "__alignof__(S15054C7)");
    check_field_offset(lv, s15054c7f0, 0, "S15054C7.s15054c7f0");
    check_field_offset(lv, s15054c7f1, 8, "S15054C7.s15054c7f1");
  }
}
static Arrange_To_Call_Me vS15054C7(Test_S15054C7, "S15054C7", 28);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15054C13_nt  {
  __tsi64 s15054c13f0;
};
//SIG(-1 S15054C13_nt) C1{ FL}



//skip512 S15054C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15054C12  {
  ::S15054C13_nt s15054c12f0;
  void  mf15054c12(); // _ZN9S15054C1210mf15054c12Ev
};
//SIG(-1 S15054C12) C1{ m FC2{ FL}}


void  S15054C12 ::mf15054c12(){}

static void Test_S15054C12()
{
  {
    init_simple_test("S15054C12");
    S15054C12 lv;
    check2(sizeof(lv), 8, "sizeof(S15054C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15054C12)");
    check_field_offset(lv, s15054c12f0, 0, "S15054C12.s15054c12f0");
  }
}
static Arrange_To_Call_Me vS15054C12(Test_S15054C12, "S15054C12", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15054C11  {
  ::S15054C12 s15054c11f0;
  ::S15054C12 s15054c11f1;
  void  mf15054c11(); // _ZN9S15054C1110mf15054c11Ev
};
//SIG(-1 S15054C11) C1{ m FC2{ m FC3{ FL}} FC2}


void  S15054C11 ::mf15054c11(){}

static void Test_S15054C11()
{
  {
    init_simple_test("S15054C11");
    S15054C11 lv;
    check2(sizeof(lv), 16, "sizeof(S15054C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15054C11)");
    check_field_offset(lv, s15054c11f0, 0, "S15054C11.s15054c11f0");
    check_field_offset(lv, s15054c11f1, 8, "S15054C11.s15054c11f1");
  }
}
static Arrange_To_Call_Me vS15054C11(Test_S15054C11, "S15054C11", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15054C10  {
  ::S15054C11 s15054c10f0;
  void  mf15054c10(); // _ZN9S15054C1010mf15054c10Ev
};
//SIG(-1 S15054C10) C1{ m FC2{ m FC3{ m FC4{ FL}} FC3}}


void  S15054C10 ::mf15054c10(){}

static void Test_S15054C10()
{
  {
    init_simple_test("S15054C10");
    S15054C10 lv;
    check2(sizeof(lv), 16, "sizeof(S15054C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15054C10)");
    check_field_offset(lv, s15054c10f0, 0, "S15054C10.s15054c10f0");
  }
}
static Arrange_To_Call_Me vS15054C10(Test_S15054C10, "S15054C10", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15054C14_nt  {
  __tsi64 s15054c14f0;
  void  mf15054c14(); // _ZN12S15054C14_nt10mf15054c14Ev
};
//SIG(-1 S15054C14_nt) C1{ m FL}


void  S15054C14_nt ::mf15054c14(){}

//skip512 S15054C14_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15054C5  {
  ::S15054C6 s15054c5f0;
  ::S15054C7 s15054c5f1;
  ::S15054C6 s15054c5f2;
  ::S15054C10 s15054c5f3;
  ::S15054C14_nt s15054c5f4;
  void  mf15054c5(); // _ZN8S15054C59mf15054c5Ev
};
//SIG(-1 S15054C5) C1{ m FC2{ m Fi[2] FL} FC3{ m Fi[2] FC4{ m Fc[20]}} FC2 FC5{ m FC6{ m FC7{ m FC8{ FL}} FC7}} FC9{ m FL}}


void  S15054C5 ::mf15054c5(){}

static void Test_S15054C5()
{
  {
    init_simple_test("S15054C5");
    S15054C5 lv;
    check2(sizeof(lv), ABISELECT(88,84), "sizeof(S15054C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15054C5)");
    check_field_offset(lv, s15054c5f0, 0, "S15054C5.s15054c5f0");
    check_field_offset(lv, s15054c5f1, 16, "S15054C5.s15054c5f1");
    check_field_offset(lv, s15054c5f2, ABISELECT(48,44), "S15054C5.s15054c5f2");
    check_field_offset(lv, s15054c5f3, ABISELECT(64,60), "S15054C5.s15054c5f3");
    check_field_offset(lv, s15054c5f4, ABISELECT(80,76), "S15054C5.s15054c5f4");
  }
}
static Arrange_To_Call_Me vS15054C5(Test_S15054C5, "S15054C5", ABISELECT(88,84));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15054C15  {
  ::S15054C6 s15054c15f0;
  void  mf15054c15(); // _ZN9S15054C1510mf15054c15Ev
};
//SIG(-1 S15054C15) C1{ m FC2{ m Fi[2] FL}}


void  S15054C15 ::mf15054c15(){}

static void Test_S15054C15()
{
  {
    init_simple_test("S15054C15");
    S15054C15 lv;
    check2(sizeof(lv), 16, "sizeof(S15054C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15054C15)");
    check_field_offset(lv, s15054c15f0, 0, "S15054C15.s15054c15f0");
  }
}
static Arrange_To_Call_Me vS15054C15(Test_S15054C15, "S15054C15", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15054C2  {
  int s15054c2f0;
  ::S8310C3 s15054c2f1;
  ::S15054C5 s15054c2f2;
  ::S15054C15 s15054c2f3;
  ::S3432C14_nt s15054c2f4;
  void  mf15054c2(); // _ZN8S15054C29mf15054c2Ev
};
//SIG(-1 S15054C2) C1{ m Fi FC2{ m FC3{ Fc[12]}} FC4{ m FC5{ m Fi[2] FL} FC6{ m Fi[2] FC7{ m Fc[20]}} FC5 FC8{ m FC9{ m FC10{ m FC11{ FL}} FC10}} FC12{ m FL}} FC13{ m FC5} FC14{ m Fi[2]}}


void  S15054C2 ::mf15054c2(){}

static void Test_S15054C2()
{
  {
    init_simple_test("S15054C2");
    S15054C2 lv;
    check2(sizeof(lv), ABISELECT(128,124), "sizeof(S15054C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15054C2)");
    check_field_offset(lv, s15054c2f0, 0, "S15054C2.s15054c2f0");
    check_field_offset(lv, s15054c2f1, 4, "S15054C2.s15054c2f1");
    check_field_offset(lv, s15054c2f2, 16, "S15054C2.s15054c2f2");
    check_field_offset(lv, s15054c2f3, ABISELECT(104,100), "S15054C2.s15054c2f3");
    check_field_offset(lv, s15054c2f4, ABISELECT(120,116), "S15054C2.s15054c2f4");
  }
}
static Arrange_To_Call_Me vS15054C2(Test_S15054C2, "S15054C2", ABISELECT(128,124));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15054C17_nt  {
  char s15054c17f0[2];
  void  mf15054c17(); // _ZN12S15054C17_nt10mf15054c17Ev
};
//SIG(-1 S15054C17_nt) C1{ m Fc[2]}


void  S15054C17_nt ::mf15054c17(){}

//skip512 S15054C17_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15054C18_nt  {
  char s15054c18f0;
  void  mf15054c18(); // _ZN12S15054C18_nt10mf15054c18Ev
};
//SIG(-1 S15054C18_nt) C1{ m Fc}


void  S15054C18_nt ::mf15054c18(){}

//skip512 S15054C18_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15054C1  {
  char s15054c1f0;
  ::S15054C2 s15054c1f1;
  ::S15054C17_nt s15054c1f2;
  ::S15054C18_nt s15054c1f3;
  void  mf15054c1(); // _ZN8S15054C19mf15054c1Ev
};
//SIG(1 S15054C1) C1{ m Fc FC2{ m Fi FC3{ m FC4{ Fc[12]}} FC5{ m FC6{ m Fi[2] FL} FC7{ m Fi[2] FC8{ m Fc[20]}} FC6 FC9{ m FC10{ m FC11{ m FC12{ FL}} FC11}} FC13{ m FL}} FC14{ m FC6} FC15{ m Fi[2]}} FC16{ m Fc[2]} FC17{ m Fc}}


void  S15054C1 ::mf15054c1(){}

static void Test_S15054C1()
{
  {
    init_simple_test("S15054C1");
    S15054C1 lv;
    check2(sizeof(lv), ABISELECT(144,132), "sizeof(S15054C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15054C1)");
    check_field_offset(lv, s15054c1f0, 0, "S15054C1.s15054c1f0");
    check_field_offset(lv, s15054c1f1, ABISELECT(8,4), "S15054C1.s15054c1f1");
    check_field_offset(lv, s15054c1f2, ABISELECT(136,128), "S15054C1.s15054c1f2");
    check_field_offset(lv, s15054c1f3, ABISELECT(138,130), "S15054C1.s15054c1f3");
  }
}
static Arrange_To_Call_Me vS15054C1(Test_S15054C1, "S15054C1", ABISELECT(144,132));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15053C9  {
  int s15053c9f0[2];
  __tsi64 s15053c9f1;
  void  mf15053c9(); // _ZN8S15053C99mf15053c9Ev
};
//SIG(-1 S15053C9) C1{ m Fi[2] FL}


void  S15053C9 ::mf15053c9(){}

static void Test_S15053C9()
{
  {
    init_simple_test("S15053C9");
    S15053C9 lv;
    check2(sizeof(lv), 16, "sizeof(S15053C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15053C9)");
    check_field_offset(lv, s15053c9f0, 0, "S15053C9.s15053c9f0");
    check_field_offset(lv, s15053c9f1, 8, "S15053C9.s15053c9f1");
  }
}
static Arrange_To_Call_Me vS15053C9(Test_S15053C9, "S15053C9", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15053C13_nt  {
  long s15053c13f0;
};
//SIG(-1 S15053C13_nt) C1{ Fl}



//skip512 S15053C13_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15053C12  {
  ::S15053C13_nt s15053c12f0;
  void  mf15053c12(); // _ZN9S15053C1210mf15053c12Ev
};
//SIG(-1 S15053C12) C1{ m FC2{ Fl}}


void  S15053C12 ::mf15053c12(){}

static void Test_S15053C12()
{
  {
    init_simple_test("S15053C12");
    S15053C12 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S15053C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15053C12)");
    check_field_offset(lv, s15053c12f0, 0, "S15053C12.s15053c12f0");
  }
}
static Arrange_To_Call_Me vS15053C12(Test_S15053C12, "S15053C12", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15053C11  {
  ::S15053C12 s15053c11f0;
  ::S15053C12 s15053c11f1;
  void  mf15053c11(); // _ZN9S15053C1110mf15053c11Ev
};
//SIG(-1 S15053C11) C1{ m FC2{ m FC3{ Fl}} FC2}


void  S15053C11 ::mf15053c11(){}

static void Test_S15053C11()
{
  {
    init_simple_test("S15053C11");
    S15053C11 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S15053C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15053C11)");
    check_field_offset(lv, s15053c11f0, 0, "S15053C11.s15053c11f0");
    check_field_offset(lv, s15053c11f1, ABISELECT(8,4), "S15053C11.s15053c11f1");
  }
}
static Arrange_To_Call_Me vS15053C11(Test_S15053C11, "S15053C11", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15053C10  {
  ::S15053C11 s15053c10f0;
  void  mf15053c10(); // _ZN9S15053C1010mf15053c10Ev
};
//SIG(-1 S15053C10) C1{ m FC2{ m FC3{ m FC4{ Fl}} FC3}}


void  S15053C10 ::mf15053c10(){}

static void Test_S15053C10()
{
  {
    init_simple_test("S15053C10");
    S15053C10 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S15053C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15053C10)");
    check_field_offset(lv, s15053c10f0, 0, "S15053C10.s15053c10f0");
  }
}
static Arrange_To_Call_Me vS15053C10(Test_S15053C10, "S15053C10", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15053C5  {
  ::S15054C6 s15053c5f0;
  ::S15054C7 s15053c5f1;
  ::S15053C9 s15053c5f2;
  ::S15053C10 s15053c5f3;
  ::S15054C14_nt s15053c5f4;
  void  mf15053c5(); // _ZN8S15053C59mf15053c5Ev
};
//SIG(-1 S15053C5) C1{ m FC2{ m Fi[2] FL} FC3{ m Fi[2] FC4{ m Fc[20]}} FC5{ m Fi[2] FL} FC6{ m FC7{ m FC8{ m FC9{ Fl}} FC8}} FC10{ m FL}}


void  S15053C5 ::mf15053c5(){}

static void Test_S15053C5()
{
  {
    init_simple_test("S15053C5");
    S15053C5 lv;
    check2(sizeof(lv), ABISELECT(88,76), "sizeof(S15053C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15053C5)");
    check_field_offset(lv, s15053c5f0, 0, "S15053C5.s15053c5f0");
    check_field_offset(lv, s15053c5f1, 16, "S15053C5.s15053c5f1");
    check_field_offset(lv, s15053c5f2, ABISELECT(48,44), "S15053C5.s15053c5f2");
    check_field_offset(lv, s15053c5f3, ABISELECT(64,60), "S15053C5.s15053c5f3");
    check_field_offset(lv, s15053c5f4, ABISELECT(80,68), "S15053C5.s15053c5f4");
  }
}
static Arrange_To_Call_Me vS15053C5(Test_S15053C5, "S15053C5", ABISELECT(88,76));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15053C2  {
  int s15053c2f0;
  ::S8310C3 s15053c2f1;
  ::S15053C5 s15053c2f2;
  ::S15054C15 s15053c2f3;
  ::S3432C14_nt s15053c2f4;
  void  mf15053c2(); // _ZN8S15053C29mf15053c2Ev
};
//SIG(-1 S15053C2) C1{ m Fi FC2{ m FC3{ Fc[12]}} FC4{ m FC5{ m Fi[2] FL} FC6{ m Fi[2] FC7{ m Fc[20]}} FC8{ m Fi[2] FL} FC9{ m FC10{ m FC11{ m FC12{ Fl}} FC11}} FC13{ m FL}} FC14{ m FC5} FC15{ m Fi[2]}}


void  S15053C2 ::mf15053c2(){}

static void Test_S15053C2()
{
  {
    init_simple_test("S15053C2");
    S15053C2 lv;
    check2(sizeof(lv), ABISELECT(128,116), "sizeof(S15053C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15053C2)");
    check_field_offset(lv, s15053c2f0, 0, "S15053C2.s15053c2f0");
    check_field_offset(lv, s15053c2f1, 4, "S15053C2.s15053c2f1");
    check_field_offset(lv, s15053c2f2, 16, "S15053C2.s15053c2f2");
    check_field_offset(lv, s15053c2f3, ABISELECT(104,92), "S15053C2.s15053c2f3");
    check_field_offset(lv, s15053c2f4, ABISELECT(120,108), "S15053C2.s15053c2f4");
  }
}
static Arrange_To_Call_Me vS15053C2(Test_S15053C2, "S15053C2", ABISELECT(128,116));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15053C1  {
  char s15053c1f0;
  ::S15053C2 s15053c1f1;
  ::S15054C17_nt s15053c1f2;
  ::S15054C18_nt s15053c1f3;
  void  mf15053c1(); // _ZN8S15053C19mf15053c1Ev
};
//SIG(1 S15053C1) C1{ m Fc FC2{ m Fi FC3{ m FC4{ Fc[12]}} FC5{ m FC6{ m Fi[2] FL} FC7{ m Fi[2] FC8{ m Fc[20]}} FC9{ m Fi[2] FL} FC10{ m FC11{ m FC12{ m FC13{ Fl}} FC12}} FC14{ m FL}} FC15{ m FC6} FC16{ m Fi[2]}} FC17{ m Fc[2]} FC18{ m Fc}}


void  S15053C1 ::mf15053c1(){}

static void Test_S15053C1()
{
  {
    init_simple_test("S15053C1");
    S15053C1 lv;
    check2(sizeof(lv), ABISELECT(144,124), "sizeof(S15053C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15053C1)");
    check_field_offset(lv, s15053c1f0, 0, "S15053C1.s15053c1f0");
    check_field_offset(lv, s15053c1f1, ABISELECT(8,4), "S15053C1.s15053c1f1");
    check_field_offset(lv, s15053c1f2, ABISELECT(136,120), "S15053C1.s15053c1f2");
    check_field_offset(lv, s15053c1f3, ABISELECT(138,122), "S15053C1.s15053c1f3");
  }
}
static Arrange_To_Call_Me vS15053C1(Test_S15053C1, "S15053C1", ABISELECT(144,124));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3991C4  : S4055C3_nt {
  virtual  ~S3991C4(); // _ZN7S3991C4D1Ev
  virtual void  v6(); // _ZN7S3991C42v6Ev
  S3991C4(); // tgen
};
//SIG(-1 S3991C4) C1{ BC2{ vd m} vd v1}


 S3991C4 ::~S3991C4(){ note_dtor("S3991C4", this);}
void  S3991C4 ::v6(){vfunc_called(this, "_ZN7S3991C42v6Ev");}
S3991C4 ::S3991C4(){ note_ctor("S3991C4", this);} // tgen

static void Test_S3991C4()
{
  extern Class_Descriptor cd_S3991C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3991C4, buf);
    S3991C4 *dp, &lv = *(dp=new (buf) S3991C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3991C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3991C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3991C4");
    test_class_info(&lv, &cd_S3991C4);
    dp->~S3991C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3991C4(Test_S3991C4, "S3991C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3991C4C1Ev();
extern void _ZN7S3991C4D1Ev();
Name_Map name_map_S3991C4[] = {
  NSPAIR(_ZN7S3991C4C1Ev),
  NSPAIR(_ZN7S3991C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3991C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3991C4[];
extern void _ZN7S3991C4D1Ev();
extern void _ZN7S3991C4D0Ev();
extern void _ZN7S3991C42v6Ev();
static  VTBL_ENTRY vtc_S3991C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3991C4[0]),
  (VTBL_ENTRY)&_ZN7S3991C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3991C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3991C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3991C4[];
extern  VTBL_ENTRY _ZTV7S3991C4[];
Class_Descriptor cd_S3991C4 = {  "S3991C4", // class name
  bases_S3991C4, 1,
  &(vtc_S3991C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3991C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3991C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3991C2  : S4055C3_nt , S3991C4 {
  void *s3991c2f0[5];
  int s3991c2f1[2];
  ::S14975C17_nt s3991c2f2;
  void *s3991c2f3;
  int s3991c2f4;
  void *s3991c2f5;
  int s3991c2f6[2];
  void *s3991c2f7;
  int s3991c2f8[2];
  virtual  ~S3991C2(); // _ZN7S3991C2D1Ev
  virtual void  v7(); // _ZN7S3991C22v7Ev
  virtual void  v8(); // _ZN7S3991C22v8Ev
  virtual void  v9(); // _ZN7S3991C22v9Ev
  virtual void  v10(); // _ZN7S3991C23v10Ev
  virtual void  v11(); // _ZN7S3991C23v11Ev
  virtual void  v12(); // _ZN7S3991C23v12Ev
  virtual void  v13(); // _ZN7S3991C23v13Ev
  virtual void  v14(); // _ZN7S3991C23v14Ev
  virtual void  v15(); // _ZN7S3991C23v15Ev
  virtual void  v16(); // _ZN7S3991C23v16Ev
  virtual void  v17(); // _ZN7S3991C23v17Ev
  virtual void  v18(); // _ZN7S3991C23v18Ev
  S3991C2(); // tgen
};
//SIG(-1 S3991C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3991C2 ::~S3991C2(){ note_dtor("S3991C2", this);}
void  S3991C2 ::v7(){vfunc_called(this, "_ZN7S3991C22v7Ev");}
void  S3991C2 ::v8(){vfunc_called(this, "_ZN7S3991C22v8Ev");}
void  S3991C2 ::v9(){vfunc_called(this, "_ZN7S3991C22v9Ev");}
void  S3991C2 ::v10(){vfunc_called(this, "_ZN7S3991C23v10Ev");}
void  S3991C2 ::v11(){vfunc_called(this, "_ZN7S3991C23v11Ev");}
void  S3991C2 ::v12(){vfunc_called(this, "_ZN7S3991C23v12Ev");}
void  S3991C2 ::v13(){vfunc_called(this, "_ZN7S3991C23v13Ev");}
void  S3991C2 ::v14(){vfunc_called(this, "_ZN7S3991C23v14Ev");}
void  S3991C2 ::v15(){vfunc_called(this, "_ZN7S3991C23v15Ev");}
void  S3991C2 ::v16(){vfunc_called(this, "_ZN7S3991C23v16Ev");}
void  S3991C2 ::v17(){vfunc_called(this, "_ZN7S3991C23v17Ev");}
void  S3991C2 ::v18(){vfunc_called(this, "_ZN7S3991C23v18Ev");}
S3991C2 ::S3991C2(){ note_ctor("S3991C2", this);} // tgen

static void Test_S3991C2()
{
  extern Class_Descriptor cd_S3991C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3991C2, buf);
    S3991C2 *dp, &lv = *(dp=new (buf) S3991C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3991C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3991C2)");
    /*is_ambiguous_... S3991C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3991C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3991C4*), ABISELECT(8,4), "S3991C2");
    check_base_class_offset(lv, (S3991C4*), ABISELECT(8,4), "S3991C2");
    check_field_offset(lv, s3991c2f0, ABISELECT(16,8), "S3991C2.s3991c2f0");
    check_field_offset(lv, s3991c2f1, ABISELECT(56,28), "S3991C2.s3991c2f1");
    check_field_offset(lv, s3991c2f2, ABISELECT(64,36), "S3991C2.s3991c2f2");
    check_field_offset(lv, s3991c2f3, ABISELECT(72,40), "S3991C2.s3991c2f3");
    check_field_offset(lv, s3991c2f4, ABISELECT(80,44), "S3991C2.s3991c2f4");
    check_field_offset(lv, s3991c2f5, ABISELECT(88,48), "S3991C2.s3991c2f5");
    check_field_offset(lv, s3991c2f6, ABISELECT(96,52), "S3991C2.s3991c2f6");
    check_field_offset(lv, s3991c2f7, ABISELECT(104,60), "S3991C2.s3991c2f7");
    check_field_offset(lv, s3991c2f8, ABISELECT(112,64), "S3991C2.s3991c2f8");
    test_class_info(&lv, &cd_S3991C2);
    dp->~S3991C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3991C2(Test_S3991C2, "S3991C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3991C2C1Ev();
extern void _ZN7S3991C2D1Ev();
Name_Map name_map_S3991C2[] = {
  NSPAIR(_ZN7S3991C2C1Ev),
  NSPAIR(_ZN7S3991C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3991C4;
extern VTBL_ENTRY _ZTI7S3991C4[];
extern  VTBL_ENTRY _ZTV7S3991C4[];
static Base_Class bases_S3991C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3991C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3991C2[];
extern void _ZN7S3991C2D1Ev();
extern void _ZN7S3991C2D0Ev();
extern void _ZN7S3991C22v7Ev();
extern void _ZN7S3991C22v8Ev();
extern void _ZN7S3991C22v9Ev();
extern void _ZN7S3991C23v10Ev();
extern void _ZN7S3991C23v11Ev();
extern void _ZN7S3991C23v12Ev();
extern void _ZN7S3991C23v13Ev();
extern void _ZN7S3991C23v14Ev();
extern void _ZN7S3991C23v15Ev();
extern void _ZN7S3991C23v16Ev();
extern void _ZN7S3991C23v17Ev();
extern void _ZN7S3991C23v18Ev();
extern void ABISELECT(_ZThn8_N7S3991C2D1Ev,_ZThn4_N7S3991C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3991C2D0Ev,_ZThn4_N7S3991C2D0Ev)();
extern void _ZN7S3991C42v6Ev();
static  VTBL_ENTRY vtc_S3991C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3991C2[0]),
  (VTBL_ENTRY)&_ZN7S3991C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3991C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3991C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3991C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3991C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v18Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3991C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3991C2D1Ev,_ZThn4_N7S3991C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3991C2D0Ev,_ZThn4_N7S3991C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3991C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3991C2[];
extern  VTBL_ENTRY _ZTV7S3991C2[];
Class_Descriptor cd_S3991C2 = {  "S3991C2", // class name
  bases_S3991C2, 3,
  &(vtc_S3991C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3991C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3991C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3991C6  : S4055C3_nt {
  virtual  ~S3991C6(); // _ZN7S3991C6D1Ev
  virtual void  v19(); // _ZN7S3991C63v19Ev
  S3991C6(); // tgen
};
//SIG(-1 S3991C6) C1{ BC2{ vd m} vd v1}


 S3991C6 ::~S3991C6(){ note_dtor("S3991C6", this);}
void  S3991C6 ::v19(){vfunc_called(this, "_ZN7S3991C63v19Ev");}
S3991C6 ::S3991C6(){ note_ctor("S3991C6", this);} // tgen

static void Test_S3991C6()
{
  extern Class_Descriptor cd_S3991C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3991C6, buf);
    S3991C6 *dp, &lv = *(dp=new (buf) S3991C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3991C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3991C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3991C6");
    test_class_info(&lv, &cd_S3991C6);
    dp->~S3991C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3991C6(Test_S3991C6, "S3991C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3991C6C1Ev();
extern void _ZN7S3991C6D1Ev();
Name_Map name_map_S3991C6[] = {
  NSPAIR(_ZN7S3991C6C1Ev),
  NSPAIR(_ZN7S3991C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3991C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3991C6[];
extern void _ZN7S3991C6D1Ev();
extern void _ZN7S3991C6D0Ev();
extern void _ZN7S3991C63v19Ev();
static  VTBL_ENTRY vtc_S3991C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3991C6[0]),
  (VTBL_ENTRY)&_ZN7S3991C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3991C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3991C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3991C6[];
extern  VTBL_ENTRY _ZTV7S3991C6[];
Class_Descriptor cd_S3991C6 = {  "S3991C6", // class name
  bases_S3991C6, 1,
  &(vtc_S3991C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3991C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3991C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3991C1  : S3991C2 , S3991C6 {
  void *s3991c1f0[2];
  int s3991c1f1;
  void *s3991c1f2[3];
  int s3991c1f3;
  void *s3991c1f4;
  int s3991c1f5;
  void *s3991c1f6[3];
  int s3991c1f7[3];
  virtual  ~S3991C1(); // _ZN7S3991C1D1Ev
  virtual void  v1(); // _ZN7S3991C12v1Ev
  virtual void  v2(); // _ZN7S3991C12v2Ev
  virtual void  v3(); // _ZN7S3991C12v3Ev
  virtual void  v4(); // _ZN7S3991C12v4Ev
  virtual void  v5(); // _ZN7S3991C12v5Ev
  S3991C1(); // tgen
};
//SIG(1 S3991C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v6} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v19} vd v1 v2 v3 v4 v5 Fp[2] Fi Fp[3] Fi Fp Fi Fp[3] Fi[3]}


 S3991C1 ::~S3991C1(){ note_dtor("S3991C1", this);}
void  S3991C1 ::v1(){vfunc_called(this, "_ZN7S3991C12v1Ev");}
void  S3991C1 ::v2(){vfunc_called(this, "_ZN7S3991C12v2Ev");}
void  S3991C1 ::v3(){vfunc_called(this, "_ZN7S3991C12v3Ev");}
void  S3991C1 ::v4(){vfunc_called(this, "_ZN7S3991C12v4Ev");}
void  S3991C1 ::v5(){vfunc_called(this, "_ZN7S3991C12v5Ev");}
S3991C1 ::S3991C1(){ note_ctor("S3991C1", this);} // tgen

static void Test_S3991C1()
{
  extern Class_Descriptor cd_S3991C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,35)];
    init_test(&cd_S3991C1, buf);
    S3991C1 *dp, &lv = *(dp=new (buf) S3991C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,136), "sizeof(S3991C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3991C1)");
    /*is_ambiguous_... S3991C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3991C2*), 0, "S3991C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3991C4*)(S3991C2*), ABISELECT(8,4), "S3991C1");
    check_base_class_offset(lv, (S3991C4*)(S3991C2*), ABISELECT(8,4), "S3991C1");
    check_base_class_offset(lv, (S3991C2*), 0, "S3991C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3991C6*), ABISELECT(120,72), "S3991C1");
    check_base_class_offset(lv, (S3991C6*), ABISELECT(120,72), "S3991C1");
    check_field_offset(lv, s3991c1f0, ABISELECT(128,76), "S3991C1.s3991c1f0");
    check_field_offset(lv, s3991c1f1, ABISELECT(144,84), "S3991C1.s3991c1f1");
    check_field_offset(lv, s3991c1f2, ABISELECT(152,88), "S3991C1.s3991c1f2");
    check_field_offset(lv, s3991c1f3, ABISELECT(176,100), "S3991C1.s3991c1f3");
    check_field_offset(lv, s3991c1f4, ABISELECT(184,104), "S3991C1.s3991c1f4");
    check_field_offset(lv, s3991c1f5, ABISELECT(192,108), "S3991C1.s3991c1f5");
    check_field_offset(lv, s3991c1f6, ABISELECT(200,112), "S3991C1.s3991c1f6");
    check_field_offset(lv, s3991c1f7, ABISELECT(224,124), "S3991C1.s3991c1f7");
    test_class_info(&lv, &cd_S3991C1);
    dp->~S3991C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3991C1(Test_S3991C1, "S3991C1", ABISELECT(240,136));

#else // __cplusplus

extern void _ZN7S3991C1C1Ev();
extern void _ZN7S3991C1D1Ev();
Name_Map name_map_S3991C1[] = {
  NSPAIR(_ZN7S3991C1C1Ev),
  NSPAIR(_ZN7S3991C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3991C4;
extern VTBL_ENTRY _ZTI7S3991C4[];
extern  VTBL_ENTRY _ZTV7S3991C4[];
extern Class_Descriptor cd_S3991C2;
extern VTBL_ENTRY _ZTI7S3991C2[];
extern  VTBL_ENTRY _ZTV7S3991C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3991C6;
extern VTBL_ENTRY _ZTI7S3991C6[];
extern  VTBL_ENTRY _ZTV7S3991C6[];
static Base_Class bases_S3991C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3991C4,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3991C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3991C6,    ABISELECT(120,72), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3991C1[];
extern void _ZN7S3991C1D1Ev();
extern void _ZN7S3991C1D0Ev();
extern void _ZN7S3991C22v7Ev();
extern void _ZN7S3991C22v8Ev();
extern void _ZN7S3991C22v9Ev();
extern void _ZN7S3991C23v10Ev();
extern void _ZN7S3991C23v11Ev();
extern void _ZN7S3991C23v12Ev();
extern void _ZN7S3991C23v13Ev();
extern void _ZN7S3991C23v14Ev();
extern void _ZN7S3991C23v15Ev();
extern void _ZN7S3991C23v16Ev();
extern void _ZN7S3991C23v17Ev();
extern void _ZN7S3991C23v18Ev();
extern void _ZN7S3991C12v1Ev();
extern void _ZN7S3991C12v2Ev();
extern void _ZN7S3991C12v3Ev();
extern void _ZN7S3991C12v4Ev();
extern void _ZN7S3991C12v5Ev();
extern void ABISELECT(_ZThn8_N7S3991C1D1Ev,_ZThn4_N7S3991C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3991C1D0Ev,_ZThn4_N7S3991C1D0Ev)();
extern void _ZN7S3991C42v6Ev();
extern void ABISELECT(_ZThn120_N7S3991C1D1Ev,_ZThn72_N7S3991C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3991C1D0Ev,_ZThn72_N7S3991C1D0Ev)();
extern void _ZN7S3991C63v19Ev();
static  VTBL_ENTRY vtc_S3991C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3991C1[0]),
  (VTBL_ENTRY)&_ZN7S3991C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3991C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3991C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3991C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3991C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3991C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3991C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3991C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3991C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3991C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3991C12v5Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3991C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3991C1D1Ev,_ZThn4_N7S3991C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3991C1D0Ev,_ZThn4_N7S3991C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3991C42v6Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3991C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3991C1D1Ev,_ZThn72_N7S3991C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3991C1D0Ev,_ZThn72_N7S3991C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3991C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3991C1[];
extern  VTBL_ENTRY _ZTV7S3991C1[];
Class_Descriptor cd_S3991C1 = {  "S3991C1", // class name
  bases_S3991C1, 6,
  &(vtc_S3991C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,136), // object size
  NSPAIRA(_ZTI7S3991C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3991C1),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3997C4  : S4055C3_nt {
  virtual  ~S3997C4(); // _ZN7S3997C4D1Ev
  virtual void  v6(); // _ZN7S3997C42v6Ev
  S3997C4(); // tgen
};
//SIG(-1 S3997C4) C1{ BC2{ vd m} vd v1}


 S3997C4 ::~S3997C4(){ note_dtor("S3997C4", this);}
void  S3997C4 ::v6(){vfunc_called(this, "_ZN7S3997C42v6Ev");}
S3997C4 ::S3997C4(){ note_ctor("S3997C4", this);} // tgen

static void Test_S3997C4()
{
  extern Class_Descriptor cd_S3997C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3997C4, buf);
    S3997C4 *dp, &lv = *(dp=new (buf) S3997C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3997C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3997C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3997C4");
    test_class_info(&lv, &cd_S3997C4);
    dp->~S3997C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3997C4(Test_S3997C4, "S3997C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3997C4C1Ev();
extern void _ZN7S3997C4D1Ev();
Name_Map name_map_S3997C4[] = {
  NSPAIR(_ZN7S3997C4C1Ev),
  NSPAIR(_ZN7S3997C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3997C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3997C4[];
extern void _ZN7S3997C4D1Ev();
extern void _ZN7S3997C4D0Ev();
extern void _ZN7S3997C42v6Ev();
static  VTBL_ENTRY vtc_S3997C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3997C4[0]),
  (VTBL_ENTRY)&_ZN7S3997C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3997C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3997C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3997C4[];
extern  VTBL_ENTRY _ZTV7S3997C4[];
Class_Descriptor cd_S3997C4 = {  "S3997C4", // class name
  bases_S3997C4, 1,
  &(vtc_S3997C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3997C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3997C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3997C2  : S4055C3_nt , S3997C4 {
  void *s3997c2f0[5];
  int s3997c2f1[2];
  ::S14975C17_nt s3997c2f2;
  void *s3997c2f3;
  int s3997c2f4;
  void *s3997c2f5;
  int s3997c2f6[2];
  void *s3997c2f7;
  int s3997c2f8[2];
  virtual  ~S3997C2(); // _ZN7S3997C2D1Ev
  virtual void  v7(); // _ZN7S3997C22v7Ev
  virtual void  v8(); // _ZN7S3997C22v8Ev
  virtual void  v9(); // _ZN7S3997C22v9Ev
  virtual void  v10(); // _ZN7S3997C23v10Ev
  virtual void  v11(); // _ZN7S3997C23v11Ev
  virtual void  v12(); // _ZN7S3997C23v12Ev
  virtual void  v13(); // _ZN7S3997C23v13Ev
  virtual void  v14(); // _ZN7S3997C23v14Ev
  virtual void  v15(); // _ZN7S3997C23v15Ev
  virtual void  v16(); // _ZN7S3997C23v16Ev
  virtual void  v17(); // _ZN7S3997C23v17Ev
  virtual void  v18(); // _ZN7S3997C23v18Ev
  S3997C2(); // tgen
};
//SIG(-1 S3997C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3997C2 ::~S3997C2(){ note_dtor("S3997C2", this);}
void  S3997C2 ::v7(){vfunc_called(this, "_ZN7S3997C22v7Ev");}
void  S3997C2 ::v8(){vfunc_called(this, "_ZN7S3997C22v8Ev");}
void  S3997C2 ::v9(){vfunc_called(this, "_ZN7S3997C22v9Ev");}
void  S3997C2 ::v10(){vfunc_called(this, "_ZN7S3997C23v10Ev");}
void  S3997C2 ::v11(){vfunc_called(this, "_ZN7S3997C23v11Ev");}
void  S3997C2 ::v12(){vfunc_called(this, "_ZN7S3997C23v12Ev");}
void  S3997C2 ::v13(){vfunc_called(this, "_ZN7S3997C23v13Ev");}
void  S3997C2 ::v14(){vfunc_called(this, "_ZN7S3997C23v14Ev");}
void  S3997C2 ::v15(){vfunc_called(this, "_ZN7S3997C23v15Ev");}
void  S3997C2 ::v16(){vfunc_called(this, "_ZN7S3997C23v16Ev");}
void  S3997C2 ::v17(){vfunc_called(this, "_ZN7S3997C23v17Ev");}
void  S3997C2 ::v18(){vfunc_called(this, "_ZN7S3997C23v18Ev");}
S3997C2 ::S3997C2(){ note_ctor("S3997C2", this);} // tgen

static void Test_S3997C2()
{
  extern Class_Descriptor cd_S3997C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3997C2, buf);
    S3997C2 *dp, &lv = *(dp=new (buf) S3997C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3997C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3997C2)");
    /*is_ambiguous_... S3997C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3997C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3997C4*), ABISELECT(8,4), "S3997C2");
    check_base_class_offset(lv, (S3997C4*), ABISELECT(8,4), "S3997C2");
    check_field_offset(lv, s3997c2f0, ABISELECT(16,8), "S3997C2.s3997c2f0");
    check_field_offset(lv, s3997c2f1, ABISELECT(56,28), "S3997C2.s3997c2f1");
    check_field_offset(lv, s3997c2f2, ABISELECT(64,36), "S3997C2.s3997c2f2");
    check_field_offset(lv, s3997c2f3, ABISELECT(72,40), "S3997C2.s3997c2f3");
    check_field_offset(lv, s3997c2f4, ABISELECT(80,44), "S3997C2.s3997c2f4");
    check_field_offset(lv, s3997c2f5, ABISELECT(88,48), "S3997C2.s3997c2f5");
    check_field_offset(lv, s3997c2f6, ABISELECT(96,52), "S3997C2.s3997c2f6");
    check_field_offset(lv, s3997c2f7, ABISELECT(104,60), "S3997C2.s3997c2f7");
    check_field_offset(lv, s3997c2f8, ABISELECT(112,64), "S3997C2.s3997c2f8");
    test_class_info(&lv, &cd_S3997C2);
    dp->~S3997C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3997C2(Test_S3997C2, "S3997C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3997C2C1Ev();
extern void _ZN7S3997C2D1Ev();
Name_Map name_map_S3997C2[] = {
  NSPAIR(_ZN7S3997C2C1Ev),
  NSPAIR(_ZN7S3997C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3997C4;
extern VTBL_ENTRY _ZTI7S3997C4[];
extern  VTBL_ENTRY _ZTV7S3997C4[];
static Base_Class bases_S3997C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3997C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3997C2[];
extern void _ZN7S3997C2D1Ev();
extern void _ZN7S3997C2D0Ev();
extern void _ZN7S3997C22v7Ev();
extern void _ZN7S3997C22v8Ev();
extern void _ZN7S3997C22v9Ev();
extern void _ZN7S3997C23v10Ev();
extern void _ZN7S3997C23v11Ev();
extern void _ZN7S3997C23v12Ev();
extern void _ZN7S3997C23v13Ev();
extern void _ZN7S3997C23v14Ev();
extern void _ZN7S3997C23v15Ev();
extern void _ZN7S3997C23v16Ev();
extern void _ZN7S3997C23v17Ev();
extern void _ZN7S3997C23v18Ev();
extern void ABISELECT(_ZThn8_N7S3997C2D1Ev,_ZThn4_N7S3997C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3997C2D0Ev,_ZThn4_N7S3997C2D0Ev)();
extern void _ZN7S3997C42v6Ev();
static  VTBL_ENTRY vtc_S3997C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3997C2[0]),
  (VTBL_ENTRY)&_ZN7S3997C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3997C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3997C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3997C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3997C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v18Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3997C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3997C2D1Ev,_ZThn4_N7S3997C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3997C2D0Ev,_ZThn4_N7S3997C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3997C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3997C2[];
extern  VTBL_ENTRY _ZTV7S3997C2[];
Class_Descriptor cd_S3997C2 = {  "S3997C2", // class name
  bases_S3997C2, 3,
  &(vtc_S3997C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3997C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3997C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3997C6  : S4055C3_nt {
  virtual  ~S3997C6(); // _ZN7S3997C6D1Ev
  virtual void  v19(); // _ZN7S3997C63v19Ev
  S3997C6(); // tgen
};
//SIG(-1 S3997C6) C1{ BC2{ vd m} vd v1}


 S3997C6 ::~S3997C6(){ note_dtor("S3997C6", this);}
void  S3997C6 ::v19(){vfunc_called(this, "_ZN7S3997C63v19Ev");}
S3997C6 ::S3997C6(){ note_ctor("S3997C6", this);} // tgen

static void Test_S3997C6()
{
  extern Class_Descriptor cd_S3997C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3997C6, buf);
    S3997C6 *dp, &lv = *(dp=new (buf) S3997C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3997C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3997C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3997C6");
    test_class_info(&lv, &cd_S3997C6);
    dp->~S3997C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3997C6(Test_S3997C6, "S3997C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3997C6C1Ev();
extern void _ZN7S3997C6D1Ev();
Name_Map name_map_S3997C6[] = {
  NSPAIR(_ZN7S3997C6C1Ev),
  NSPAIR(_ZN7S3997C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3997C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3997C6[];
extern void _ZN7S3997C6D1Ev();
extern void _ZN7S3997C6D0Ev();
extern void _ZN7S3997C63v19Ev();
static  VTBL_ENTRY vtc_S3997C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3997C6[0]),
  (VTBL_ENTRY)&_ZN7S3997C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3997C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3997C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3997C6[];
extern  VTBL_ENTRY _ZTV7S3997C6[];
Class_Descriptor cd_S3997C6 = {  "S3997C6", // class name
  bases_S3997C6, 1,
  &(vtc_S3997C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3997C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3997C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3997C7  {
  int s3997c7f0;
  ::S12844C15_nt s3997c7f1;
  ::S15054C13_nt s3997c7f2;
  int s3997c7f3;
  ::S15054C13_nt s3997c7f4;
};
//SIG(-1 S3997C7) C1{ Fi FC2{ Fi} FC3{ FL} Fi FC3}



static void Test_S3997C7()
{
  {
    init_simple_test("S3997C7");
    S3997C7 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S3997C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3997C7)");
    check_field_offset(lv, s3997c7f0, 0, "S3997C7.s3997c7f0");
    check_field_offset(lv, s3997c7f1, 4, "S3997C7.s3997c7f1");
    check_field_offset(lv, s3997c7f2, 8, "S3997C7.s3997c7f2");
    check_field_offset(lv, s3997c7f3, 16, "S3997C7.s3997c7f3");
    check_field_offset(lv, s3997c7f4, ABISELECT(24,20), "S3997C7.s3997c7f4");
  }
}
static Arrange_To_Call_Me vS3997C7(Test_S3997C7, "S3997C7", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3997C1  : S3997C2 , S3997C6 {
  void *s3997c1f0[4];
  ::S3997C7 s3997c1f1;
  virtual  ~S3997C1(); // _ZN7S3997C1D1Ev
  virtual void  v1(); // _ZN7S3997C12v1Ev
  virtual void  v2(); // _ZN7S3997C12v2Ev
  virtual void  v3(); // _ZN7S3997C12v3Ev
  virtual void  v4(); // _ZN7S3997C12v4Ev
  virtual void  v5(); // _ZN7S3997C12v5Ev
  S3997C1(); // tgen
};
//SIG(1 S3997C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v6} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v19} vd v1 v2 v3 v4 v5 Fp[4] FC7{ Fi FC8{ Fi} FC9{ FL} Fi FC9}}


 S3997C1 ::~S3997C1(){ note_dtor("S3997C1", this);}
void  S3997C1 ::v1(){vfunc_called(this, "_ZN7S3997C12v1Ev");}
void  S3997C1 ::v2(){vfunc_called(this, "_ZN7S3997C12v2Ev");}
void  S3997C1 ::v3(){vfunc_called(this, "_ZN7S3997C12v3Ev");}
void  S3997C1 ::v4(){vfunc_called(this, "_ZN7S3997C12v4Ev");}
void  S3997C1 ::v5(){vfunc_called(this, "_ZN7S3997C12v5Ev");}
S3997C1 ::S3997C1(){ note_ctor("S3997C1", this);} // tgen

static void Test_S3997C1()
{
  extern Class_Descriptor cd_S3997C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,31)];
    init_test(&cd_S3997C1, buf);
    S3997C1 *dp, &lv = *(dp=new (buf) S3997C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,120), "sizeof(S3997C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3997C1)");
    /*is_ambiguous_... S3997C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3997C2*), 0, "S3997C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3997C4*)(S3997C2*), ABISELECT(8,4), "S3997C1");
    check_base_class_offset(lv, (S3997C4*)(S3997C2*), ABISELECT(8,4), "S3997C1");
    check_base_class_offset(lv, (S3997C2*), 0, "S3997C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3997C6*), ABISELECT(120,72), "S3997C1");
    check_base_class_offset(lv, (S3997C6*), ABISELECT(120,72), "S3997C1");
    check_field_offset(lv, s3997c1f0, ABISELECT(128,76), "S3997C1.s3997c1f0");
    check_field_offset(lv, s3997c1f1, ABISELECT(160,92), "S3997C1.s3997c1f1");
    test_class_info(&lv, &cd_S3997C1);
    dp->~S3997C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3997C1(Test_S3997C1, "S3997C1", ABISELECT(192,120));

#else // __cplusplus

extern void _ZN7S3997C1C1Ev();
extern void _ZN7S3997C1D1Ev();
Name_Map name_map_S3997C1[] = {
  NSPAIR(_ZN7S3997C1C1Ev),
  NSPAIR(_ZN7S3997C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3997C4;
extern VTBL_ENTRY _ZTI7S3997C4[];
extern  VTBL_ENTRY _ZTV7S3997C4[];
extern Class_Descriptor cd_S3997C2;
extern VTBL_ENTRY _ZTI7S3997C2[];
extern  VTBL_ENTRY _ZTV7S3997C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3997C6;
extern VTBL_ENTRY _ZTI7S3997C6[];
extern  VTBL_ENTRY _ZTV7S3997C6[];
static Base_Class bases_S3997C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3997C4,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3997C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3997C6,    ABISELECT(120,72), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3997C1[];
extern void _ZN7S3997C1D1Ev();
extern void _ZN7S3997C1D0Ev();
extern void _ZN7S3997C22v7Ev();
extern void _ZN7S3997C22v8Ev();
extern void _ZN7S3997C22v9Ev();
extern void _ZN7S3997C23v10Ev();
extern void _ZN7S3997C23v11Ev();
extern void _ZN7S3997C23v12Ev();
extern void _ZN7S3997C23v13Ev();
extern void _ZN7S3997C23v14Ev();
extern void _ZN7S3997C23v15Ev();
extern void _ZN7S3997C23v16Ev();
extern void _ZN7S3997C23v17Ev();
extern void _ZN7S3997C23v18Ev();
extern void _ZN7S3997C12v1Ev();
extern void _ZN7S3997C12v2Ev();
extern void _ZN7S3997C12v3Ev();
extern void _ZN7S3997C12v4Ev();
extern void _ZN7S3997C12v5Ev();
extern void ABISELECT(_ZThn8_N7S3997C1D1Ev,_ZThn4_N7S3997C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3997C1D0Ev,_ZThn4_N7S3997C1D0Ev)();
extern void _ZN7S3997C42v6Ev();
extern void ABISELECT(_ZThn120_N7S3997C1D1Ev,_ZThn72_N7S3997C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3997C1D0Ev,_ZThn72_N7S3997C1D0Ev)();
extern void _ZN7S3997C63v19Ev();
static  VTBL_ENTRY vtc_S3997C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3997C1[0]),
  (VTBL_ENTRY)&_ZN7S3997C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3997C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3997C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3997C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3997C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3997C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3997C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3997C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3997C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3997C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3997C12v5Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3997C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3997C1D1Ev,_ZThn4_N7S3997C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3997C1D0Ev,_ZThn4_N7S3997C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3997C42v6Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3997C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3997C1D1Ev,_ZThn72_N7S3997C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3997C1D0Ev,_ZThn72_N7S3997C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3997C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3997C1[];
extern  VTBL_ENTRY _ZTV7S3997C1[];
Class_Descriptor cd_S3997C1 = {  "S3997C1", // class name
  bases_S3997C1, 6,
  &(vtc_S3997C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,120), // object size
  NSPAIRA(_ZTI7S3997C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3997C1),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3996C4  : S4055C3_nt {
  virtual  ~S3996C4(); // _ZN7S3996C4D1Ev
  virtual void  v6(); // _ZN7S3996C42v6Ev
  S3996C4(); // tgen
};
//SIG(-1 S3996C4) C1{ BC2{ vd m} vd v1}


 S3996C4 ::~S3996C4(){ note_dtor("S3996C4", this);}
void  S3996C4 ::v6(){vfunc_called(this, "_ZN7S3996C42v6Ev");}
S3996C4 ::S3996C4(){ note_ctor("S3996C4", this);} // tgen

static void Test_S3996C4()
{
  extern Class_Descriptor cd_S3996C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3996C4, buf);
    S3996C4 *dp, &lv = *(dp=new (buf) S3996C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3996C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3996C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3996C4");
    test_class_info(&lv, &cd_S3996C4);
    dp->~S3996C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3996C4(Test_S3996C4, "S3996C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3996C4C1Ev();
extern void _ZN7S3996C4D1Ev();
Name_Map name_map_S3996C4[] = {
  NSPAIR(_ZN7S3996C4C1Ev),
  NSPAIR(_ZN7S3996C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3996C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3996C4[];
extern void _ZN7S3996C4D1Ev();
extern void _ZN7S3996C4D0Ev();
extern void _ZN7S3996C42v6Ev();
static  VTBL_ENTRY vtc_S3996C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3996C4[0]),
  (VTBL_ENTRY)&_ZN7S3996C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3996C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3996C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3996C4[];
extern  VTBL_ENTRY _ZTV7S3996C4[];
Class_Descriptor cd_S3996C4 = {  "S3996C4", // class name
  bases_S3996C4, 1,
  &(vtc_S3996C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3996C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3996C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3996C2  : S4055C3_nt , S3996C4 {
  void *s3996c2f0[5];
  int s3996c2f1[2];
  ::S14975C17_nt s3996c2f2;
  void *s3996c2f3;
  int s3996c2f4;
  void *s3996c2f5;
  int s3996c2f6[2];
  void *s3996c2f7;
  int s3996c2f8[2];
  virtual  ~S3996C2(); // _ZN7S3996C2D1Ev
  virtual void  v7(); // _ZN7S3996C22v7Ev
  virtual void  v8(); // _ZN7S3996C22v8Ev
  virtual void  v9(); // _ZN7S3996C22v9Ev
  virtual void  v10(); // _ZN7S3996C23v10Ev
  virtual void  v11(); // _ZN7S3996C23v11Ev
  virtual void  v12(); // _ZN7S3996C23v12Ev
  virtual void  v13(); // _ZN7S3996C23v13Ev
  virtual void  v14(); // _ZN7S3996C23v14Ev
  virtual void  v15(); // _ZN7S3996C23v15Ev
  virtual void  v16(); // _ZN7S3996C23v16Ev
  virtual void  v17(); // _ZN7S3996C23v17Ev
  virtual void  v18(); // _ZN7S3996C23v18Ev
  S3996C2(); // tgen
};
//SIG(-1 S3996C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3996C2 ::~S3996C2(){ note_dtor("S3996C2", this);}
void  S3996C2 ::v7(){vfunc_called(this, "_ZN7S3996C22v7Ev");}
void  S3996C2 ::v8(){vfunc_called(this, "_ZN7S3996C22v8Ev");}
void  S3996C2 ::v9(){vfunc_called(this, "_ZN7S3996C22v9Ev");}
void  S3996C2 ::v10(){vfunc_called(this, "_ZN7S3996C23v10Ev");}
void  S3996C2 ::v11(){vfunc_called(this, "_ZN7S3996C23v11Ev");}
void  S3996C2 ::v12(){vfunc_called(this, "_ZN7S3996C23v12Ev");}
void  S3996C2 ::v13(){vfunc_called(this, "_ZN7S3996C23v13Ev");}
void  S3996C2 ::v14(){vfunc_called(this, "_ZN7S3996C23v14Ev");}
void  S3996C2 ::v15(){vfunc_called(this, "_ZN7S3996C23v15Ev");}
void  S3996C2 ::v16(){vfunc_called(this, "_ZN7S3996C23v16Ev");}
void  S3996C2 ::v17(){vfunc_called(this, "_ZN7S3996C23v17Ev");}
void  S3996C2 ::v18(){vfunc_called(this, "_ZN7S3996C23v18Ev");}
S3996C2 ::S3996C2(){ note_ctor("S3996C2", this);} // tgen

static void Test_S3996C2()
{
  extern Class_Descriptor cd_S3996C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3996C2, buf);
    S3996C2 *dp, &lv = *(dp=new (buf) S3996C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3996C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3996C2)");
    /*is_ambiguous_... S3996C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3996C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3996C4*), ABISELECT(8,4), "S3996C2");
    check_base_class_offset(lv, (S3996C4*), ABISELECT(8,4), "S3996C2");
    check_field_offset(lv, s3996c2f0, ABISELECT(16,8), "S3996C2.s3996c2f0");
    check_field_offset(lv, s3996c2f1, ABISELECT(56,28), "S3996C2.s3996c2f1");
    check_field_offset(lv, s3996c2f2, ABISELECT(64,36), "S3996C2.s3996c2f2");
    check_field_offset(lv, s3996c2f3, ABISELECT(72,40), "S3996C2.s3996c2f3");
    check_field_offset(lv, s3996c2f4, ABISELECT(80,44), "S3996C2.s3996c2f4");
    check_field_offset(lv, s3996c2f5, ABISELECT(88,48), "S3996C2.s3996c2f5");
    check_field_offset(lv, s3996c2f6, ABISELECT(96,52), "S3996C2.s3996c2f6");
    check_field_offset(lv, s3996c2f7, ABISELECT(104,60), "S3996C2.s3996c2f7");
    check_field_offset(lv, s3996c2f8, ABISELECT(112,64), "S3996C2.s3996c2f8");
    test_class_info(&lv, &cd_S3996C2);
    dp->~S3996C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3996C2(Test_S3996C2, "S3996C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3996C2C1Ev();
extern void _ZN7S3996C2D1Ev();
Name_Map name_map_S3996C2[] = {
  NSPAIR(_ZN7S3996C2C1Ev),
  NSPAIR(_ZN7S3996C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3996C4;
extern VTBL_ENTRY _ZTI7S3996C4[];
extern  VTBL_ENTRY _ZTV7S3996C4[];
static Base_Class bases_S3996C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3996C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3996C2[];
extern void _ZN7S3996C2D1Ev();
extern void _ZN7S3996C2D0Ev();
extern void _ZN7S3996C22v7Ev();
extern void _ZN7S3996C22v8Ev();
extern void _ZN7S3996C22v9Ev();
extern void _ZN7S3996C23v10Ev();
extern void _ZN7S3996C23v11Ev();
extern void _ZN7S3996C23v12Ev();
extern void _ZN7S3996C23v13Ev();
extern void _ZN7S3996C23v14Ev();
extern void _ZN7S3996C23v15Ev();
extern void _ZN7S3996C23v16Ev();
extern void _ZN7S3996C23v17Ev();
extern void _ZN7S3996C23v18Ev();
extern void ABISELECT(_ZThn8_N7S3996C2D1Ev,_ZThn4_N7S3996C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3996C2D0Ev,_ZThn4_N7S3996C2D0Ev)();
extern void _ZN7S3996C42v6Ev();
static  VTBL_ENTRY vtc_S3996C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3996C2[0]),
  (VTBL_ENTRY)&_ZN7S3996C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3996C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3996C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3996C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3996C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v18Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3996C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3996C2D1Ev,_ZThn4_N7S3996C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3996C2D0Ev,_ZThn4_N7S3996C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3996C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3996C2[];
extern  VTBL_ENTRY _ZTV7S3996C2[];
Class_Descriptor cd_S3996C2 = {  "S3996C2", // class name
  bases_S3996C2, 3,
  &(vtc_S3996C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3996C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3996C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3996C6  : S4055C3_nt {
  virtual  ~S3996C6(); // _ZN7S3996C6D1Ev
  virtual void  v19(); // _ZN7S3996C63v19Ev
  S3996C6(); // tgen
};
//SIG(-1 S3996C6) C1{ BC2{ vd m} vd v1}


 S3996C6 ::~S3996C6(){ note_dtor("S3996C6", this);}
void  S3996C6 ::v19(){vfunc_called(this, "_ZN7S3996C63v19Ev");}
S3996C6 ::S3996C6(){ note_ctor("S3996C6", this);} // tgen

static void Test_S3996C6()
{
  extern Class_Descriptor cd_S3996C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3996C6, buf);
    S3996C6 *dp, &lv = *(dp=new (buf) S3996C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3996C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3996C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3996C6");
    test_class_info(&lv, &cd_S3996C6);
    dp->~S3996C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3996C6(Test_S3996C6, "S3996C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3996C6C1Ev();
extern void _ZN7S3996C6D1Ev();
Name_Map name_map_S3996C6[] = {
  NSPAIR(_ZN7S3996C6C1Ev),
  NSPAIR(_ZN7S3996C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3996C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3996C6[];
extern void _ZN7S3996C6D1Ev();
extern void _ZN7S3996C6D0Ev();
extern void _ZN7S3996C63v19Ev();
static  VTBL_ENTRY vtc_S3996C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3996C6[0]),
  (VTBL_ENTRY)&_ZN7S3996C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3996C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3996C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3996C6[];
extern  VTBL_ENTRY _ZTV7S3996C6[];
Class_Descriptor cd_S3996C6 = {  "S3996C6", // class name
  bases_S3996C6, 1,
  &(vtc_S3996C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3996C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3996C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3996C7  {
  int s3996c7f0;
  ::S12844C15_nt s3996c7f1;
  ::S15053C13_nt s3996c7f2;
  int s3996c7f3;
  ::S15053C13_nt s3996c7f4;
};
//SIG(-1 S3996C7) C1{ Fi FC2{ Fi} FC3{ Fl} Fi FC3}



static void Test_S3996C7()
{
  {
    init_simple_test("S3996C7");
    S3996C7 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3996C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3996C7)");
    check_field_offset(lv, s3996c7f0, 0, "S3996C7.s3996c7f0");
    check_field_offset(lv, s3996c7f1, 4, "S3996C7.s3996c7f1");
    check_field_offset(lv, s3996c7f2, 8, "S3996C7.s3996c7f2");
    check_field_offset(lv, s3996c7f3, ABISELECT(16,12), "S3996C7.s3996c7f3");
    check_field_offset(lv, s3996c7f4, ABISELECT(24,16), "S3996C7.s3996c7f4");
  }
}
static Arrange_To_Call_Me vS3996C7(Test_S3996C7, "S3996C7", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3996C1  : S3996C2 , S3996C6 {
  void *s3996c1f0[4];
  ::S3996C7 s3996c1f1;
  virtual  ~S3996C1(); // _ZN7S3996C1D1Ev
  virtual void  v1(); // _ZN7S3996C12v1Ev
  virtual void  v2(); // _ZN7S3996C12v2Ev
  virtual void  v3(); // _ZN7S3996C12v3Ev
  virtual void  v4(); // _ZN7S3996C12v4Ev
  virtual void  v5(); // _ZN7S3996C12v5Ev
  S3996C1(); // tgen
};
//SIG(1 S3996C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v6} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v19} vd v1 v2 v3 v4 v5 Fp[4] FC7{ Fi FC8{ Fi} FC9{ Fl} Fi FC9}}


 S3996C1 ::~S3996C1(){ note_dtor("S3996C1", this);}
void  S3996C1 ::v1(){vfunc_called(this, "_ZN7S3996C12v1Ev");}
void  S3996C1 ::v2(){vfunc_called(this, "_ZN7S3996C12v2Ev");}
void  S3996C1 ::v3(){vfunc_called(this, "_ZN7S3996C12v3Ev");}
void  S3996C1 ::v4(){vfunc_called(this, "_ZN7S3996C12v4Ev");}
void  S3996C1 ::v5(){vfunc_called(this, "_ZN7S3996C12v5Ev");}
S3996C1 ::S3996C1(){ note_ctor("S3996C1", this);} // tgen

static void Test_S3996C1()
{
  extern Class_Descriptor cd_S3996C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,29)];
    init_test(&cd_S3996C1, buf);
    S3996C1 *dp, &lv = *(dp=new (buf) S3996C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,112), "sizeof(S3996C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3996C1)");
    /*is_ambiguous_... S3996C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3996C2*), 0, "S3996C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3996C4*)(S3996C2*), ABISELECT(8,4), "S3996C1");
    check_base_class_offset(lv, (S3996C4*)(S3996C2*), ABISELECT(8,4), "S3996C1");
    check_base_class_offset(lv, (S3996C2*), 0, "S3996C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3996C6*), ABISELECT(120,72), "S3996C1");
    check_base_class_offset(lv, (S3996C6*), ABISELECT(120,72), "S3996C1");
    check_field_offset(lv, s3996c1f0, ABISELECT(128,76), "S3996C1.s3996c1f0");
    check_field_offset(lv, s3996c1f1, ABISELECT(160,92), "S3996C1.s3996c1f1");
    test_class_info(&lv, &cd_S3996C1);
    dp->~S3996C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3996C1(Test_S3996C1, "S3996C1", ABISELECT(192,112));

#else // __cplusplus

extern void _ZN7S3996C1C1Ev();
extern void _ZN7S3996C1D1Ev();
Name_Map name_map_S3996C1[] = {
  NSPAIR(_ZN7S3996C1C1Ev),
  NSPAIR(_ZN7S3996C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3996C4;
extern VTBL_ENTRY _ZTI7S3996C4[];
extern  VTBL_ENTRY _ZTV7S3996C4[];
extern Class_Descriptor cd_S3996C2;
extern VTBL_ENTRY _ZTI7S3996C2[];
extern  VTBL_ENTRY _ZTV7S3996C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3996C6;
extern VTBL_ENTRY _ZTI7S3996C6[];
extern  VTBL_ENTRY _ZTV7S3996C6[];
static Base_Class bases_S3996C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3996C4,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3996C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3996C6,    ABISELECT(120,72), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3996C1[];
extern void _ZN7S3996C1D1Ev();
extern void _ZN7S3996C1D0Ev();
extern void _ZN7S3996C22v7Ev();
extern void _ZN7S3996C22v8Ev();
extern void _ZN7S3996C22v9Ev();
extern void _ZN7S3996C23v10Ev();
extern void _ZN7S3996C23v11Ev();
extern void _ZN7S3996C23v12Ev();
extern void _ZN7S3996C23v13Ev();
extern void _ZN7S3996C23v14Ev();
extern void _ZN7S3996C23v15Ev();
extern void _ZN7S3996C23v16Ev();
extern void _ZN7S3996C23v17Ev();
extern void _ZN7S3996C23v18Ev();
extern void _ZN7S3996C12v1Ev();
extern void _ZN7S3996C12v2Ev();
extern void _ZN7S3996C12v3Ev();
extern void _ZN7S3996C12v4Ev();
extern void _ZN7S3996C12v5Ev();
extern void ABISELECT(_ZThn8_N7S3996C1D1Ev,_ZThn4_N7S3996C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3996C1D0Ev,_ZThn4_N7S3996C1D0Ev)();
extern void _ZN7S3996C42v6Ev();
extern void ABISELECT(_ZThn120_N7S3996C1D1Ev,_ZThn72_N7S3996C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3996C1D0Ev,_ZThn72_N7S3996C1D0Ev)();
extern void _ZN7S3996C63v19Ev();
static  VTBL_ENTRY vtc_S3996C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3996C1[0]),
  (VTBL_ENTRY)&_ZN7S3996C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3996C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3996C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3996C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3996C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3996C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3996C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3996C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3996C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3996C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3996C12v5Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3996C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3996C1D1Ev,_ZThn4_N7S3996C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3996C1D0Ev,_ZThn4_N7S3996C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3996C42v6Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3996C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3996C1D1Ev,_ZThn72_N7S3996C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3996C1D0Ev,_ZThn72_N7S3996C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3996C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3996C1[];
extern  VTBL_ENTRY _ZTV7S3996C1[];
Class_Descriptor cd_S3996C1 = {  "S3996C1", // class name
  bases_S3996C1, 6,
  &(vtc_S3996C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,112), // object size
  NSPAIRA(_ZTI7S3996C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3996C1),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11373C2  {
  int s11373c2f0;
  void *s11373c2f1;
  int s11373c2f2[2];
  void *s11373c2f3;
  int s11373c2f4;
  void *s11373c2f5;
  int s11373c2f6;
  ::S8715C24 s11373c2f7;
};
//SIG(-1 S11373C2) C1{ Fi Fp Fi[2] Fp Fi Fp Fi FU2{ Fc[64] FC3{ Fc[4] Fc[4] Fi Fi Fi Fi Fi Fi Fi} FC4{ Fi Fi Fi Fi} FC5{ Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi} FC6{ Fc Fi Fi Fc} FC7{ Fc[4] Fi Fi Fi Fi Fi Fi Fi}}}



static void Test_S11373C2()
{
  {
    init_simple_test("S11373C2");
    S11373C2 lv;
    check2(sizeof(lv), ABISELECT(120,96), "sizeof(S11373C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11373C2)");
    check_field_offset(lv, s11373c2f0, 0, "S11373C2.s11373c2f0");
    check_field_offset(lv, s11373c2f1, ABISELECT(8,4), "S11373C2.s11373c2f1");
    check_field_offset(lv, s11373c2f2, ABISELECT(16,8), "S11373C2.s11373c2f2");
    check_field_offset(lv, s11373c2f3, ABISELECT(24,16), "S11373C2.s11373c2f3");
    check_field_offset(lv, s11373c2f4, ABISELECT(32,20), "S11373C2.s11373c2f4");
    check_field_offset(lv, s11373c2f5, ABISELECT(40,24), "S11373C2.s11373c2f5");
    check_field_offset(lv, s11373c2f6, ABISELECT(48,28), "S11373C2.s11373c2f6");
    check_field_offset(lv, s11373c2f7, ABISELECT(52,32), "S11373C2.s11373c2f7");
  }
}
static Arrange_To_Call_Me vS11373C2(Test_S11373C2, "S11373C2", ABISELECT(120,96));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11373C1  {
  ::S11373C2 s11373c1f0;
};
//SIG(1 S11373C1) C1{ FC2{ Fi Fp Fi[2] Fp Fi Fp Fi FU3{ Fc[64] FC4{ Fc[4] Fc[4] Fi Fi Fi Fi Fi Fi Fi} FC5{ Fi Fi Fi Fi} FC6{ Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi Fi} FC7{ Fc Fi Fi Fc} FC8{ Fc[4] Fi Fi Fi Fi Fi Fi Fi}}}}



static void Test_S11373C1()
{
  {
    init_simple_test("S11373C1");
    S11373C1 lv;
    check2(sizeof(lv), ABISELECT(120,96), "sizeof(S11373C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11373C1)");
    check_field_offset(lv, s11373c1f0, 0, "S11373C1.s11373c1f0");
  }
}
static Arrange_To_Call_Me vS11373C1(Test_S11373C1, "S11373C1", ABISELECT(120,96));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3995C4  : S4055C3_nt {
  virtual  ~S3995C4(); // _ZN7S3995C4D1Ev
  virtual void  v6(); // _ZN7S3995C42v6Ev
  S3995C4(); // tgen
};
//SIG(-1 S3995C4) C1{ BC2{ vd m} vd v1}


 S3995C4 ::~S3995C4(){ note_dtor("S3995C4", this);}
void  S3995C4 ::v6(){vfunc_called(this, "_ZN7S3995C42v6Ev");}
S3995C4 ::S3995C4(){ note_ctor("S3995C4", this);} // tgen

static void Test_S3995C4()
{
  extern Class_Descriptor cd_S3995C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3995C4, buf);
    S3995C4 *dp, &lv = *(dp=new (buf) S3995C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3995C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3995C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3995C4");
    test_class_info(&lv, &cd_S3995C4);
    dp->~S3995C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3995C4(Test_S3995C4, "S3995C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3995C4C1Ev();
extern void _ZN7S3995C4D1Ev();
Name_Map name_map_S3995C4[] = {
  NSPAIR(_ZN7S3995C4C1Ev),
  NSPAIR(_ZN7S3995C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3995C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3995C4[];
extern void _ZN7S3995C4D1Ev();
extern void _ZN7S3995C4D0Ev();
extern void _ZN7S3995C42v6Ev();
static  VTBL_ENTRY vtc_S3995C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3995C4[0]),
  (VTBL_ENTRY)&_ZN7S3995C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3995C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3995C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3995C4[];
extern  VTBL_ENTRY _ZTV7S3995C4[];
Class_Descriptor cd_S3995C4 = {  "S3995C4", // class name
  bases_S3995C4, 1,
  &(vtc_S3995C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3995C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3995C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3995C2  : S4055C3_nt , S3995C4 {
  void *s3995c2f0[5];
  int s3995c2f1[2];
  ::S14975C17_nt s3995c2f2;
  void *s3995c2f3;
  int s3995c2f4;
  void *s3995c2f5;
  int s3995c2f6[2];
  void *s3995c2f7;
  int s3995c2f8[2];
  virtual  ~S3995C2(); // _ZN7S3995C2D1Ev
  virtual void  v7(); // _ZN7S3995C22v7Ev
  virtual void  v8(); // _ZN7S3995C22v8Ev
  virtual void  v9(); // _ZN7S3995C22v9Ev
  virtual void  v10(); // _ZN7S3995C23v10Ev
  virtual void  v11(); // _ZN7S3995C23v11Ev
  virtual void  v12(); // _ZN7S3995C23v12Ev
  virtual void  v13(); // _ZN7S3995C23v13Ev
  virtual void  v14(); // _ZN7S3995C23v14Ev
  virtual void  v15(); // _ZN7S3995C23v15Ev
  virtual void  v16(); // _ZN7S3995C23v16Ev
  virtual void  v17(); // _ZN7S3995C23v17Ev
  virtual void  v18(); // _ZN7S3995C23v18Ev
  S3995C2(); // tgen
};
//SIG(-1 S3995C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3995C2 ::~S3995C2(){ note_dtor("S3995C2", this);}
void  S3995C2 ::v7(){vfunc_called(this, "_ZN7S3995C22v7Ev");}
void  S3995C2 ::v8(){vfunc_called(this, "_ZN7S3995C22v8Ev");}
void  S3995C2 ::v9(){vfunc_called(this, "_ZN7S3995C22v9Ev");}
void  S3995C2 ::v10(){vfunc_called(this, "_ZN7S3995C23v10Ev");}
void  S3995C2 ::v11(){vfunc_called(this, "_ZN7S3995C23v11Ev");}
void  S3995C2 ::v12(){vfunc_called(this, "_ZN7S3995C23v12Ev");}
void  S3995C2 ::v13(){vfunc_called(this, "_ZN7S3995C23v13Ev");}
void  S3995C2 ::v14(){vfunc_called(this, "_ZN7S3995C23v14Ev");}
void  S3995C2 ::v15(){vfunc_called(this, "_ZN7S3995C23v15Ev");}
void  S3995C2 ::v16(){vfunc_called(this, "_ZN7S3995C23v16Ev");}
void  S3995C2 ::v17(){vfunc_called(this, "_ZN7S3995C23v17Ev");}
void  S3995C2 ::v18(){vfunc_called(this, "_ZN7S3995C23v18Ev");}
S3995C2 ::S3995C2(){ note_ctor("S3995C2", this);} // tgen

static void Test_S3995C2()
{
  extern Class_Descriptor cd_S3995C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3995C2, buf);
    S3995C2 *dp, &lv = *(dp=new (buf) S3995C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3995C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3995C2)");
    /*is_ambiguous_... S3995C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3995C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3995C4*), ABISELECT(8,4), "S3995C2");
    check_base_class_offset(lv, (S3995C4*), ABISELECT(8,4), "S3995C2");
    check_field_offset(lv, s3995c2f0, ABISELECT(16,8), "S3995C2.s3995c2f0");
    check_field_offset(lv, s3995c2f1, ABISELECT(56,28), "S3995C2.s3995c2f1");
    check_field_offset(lv, s3995c2f2, ABISELECT(64,36), "S3995C2.s3995c2f2");
    check_field_offset(lv, s3995c2f3, ABISELECT(72,40), "S3995C2.s3995c2f3");
    check_field_offset(lv, s3995c2f4, ABISELECT(80,44), "S3995C2.s3995c2f4");
    check_field_offset(lv, s3995c2f5, ABISELECT(88,48), "S3995C2.s3995c2f5");
    check_field_offset(lv, s3995c2f6, ABISELECT(96,52), "S3995C2.s3995c2f6");
    check_field_offset(lv, s3995c2f7, ABISELECT(104,60), "S3995C2.s3995c2f7");
    check_field_offset(lv, s3995c2f8, ABISELECT(112,64), "S3995C2.s3995c2f8");
    test_class_info(&lv, &cd_S3995C2);
    dp->~S3995C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3995C2(Test_S3995C2, "S3995C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3995C2C1Ev();
extern void _ZN7S3995C2D1Ev();
Name_Map name_map_S3995C2[] = {
  NSPAIR(_ZN7S3995C2C1Ev),
  NSPAIR(_ZN7S3995C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3995C4;
extern VTBL_ENTRY _ZTI7S3995C4[];
extern  VTBL_ENTRY _ZTV7S3995C4[];
static Base_Class bases_S3995C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3995C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3995C2[];
extern void _ZN7S3995C2D1Ev();
extern void _ZN7S3995C2D0Ev();
extern void _ZN7S3995C22v7Ev();
extern void _ZN7S3995C22v8Ev();
extern void _ZN7S3995C22v9Ev();
extern void _ZN7S3995C23v10Ev();
extern void _ZN7S3995C23v11Ev();
extern void _ZN7S3995C23v12Ev();
extern void _ZN7S3995C23v13Ev();
extern void _ZN7S3995C23v14Ev();
extern void _ZN7S3995C23v15Ev();
extern void _ZN7S3995C23v16Ev();
extern void _ZN7S3995C23v17Ev();
extern void _ZN7S3995C23v18Ev();
extern void ABISELECT(_ZThn8_N7S3995C2D1Ev,_ZThn4_N7S3995C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3995C2D0Ev,_ZThn4_N7S3995C2D0Ev)();
extern void _ZN7S3995C42v6Ev();
static  VTBL_ENTRY vtc_S3995C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3995C2[0]),
  (VTBL_ENTRY)&_ZN7S3995C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3995C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3995C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3995C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3995C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v18Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3995C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3995C2D1Ev,_ZThn4_N7S3995C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3995C2D0Ev,_ZThn4_N7S3995C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3995C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3995C2[];
extern  VTBL_ENTRY _ZTV7S3995C2[];
Class_Descriptor cd_S3995C2 = {  "S3995C2", // class name
  bases_S3995C2, 3,
  &(vtc_S3995C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3995C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3995C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3995C6  : S4055C3_nt {
  virtual  ~S3995C6(); // _ZN7S3995C6D1Ev
  virtual void  v19(); // _ZN7S3995C63v19Ev
  S3995C6(); // tgen
};
//SIG(-1 S3995C6) C1{ BC2{ vd m} vd v1}


 S3995C6 ::~S3995C6(){ note_dtor("S3995C6", this);}
void  S3995C6 ::v19(){vfunc_called(this, "_ZN7S3995C63v19Ev");}
S3995C6 ::S3995C6(){ note_ctor("S3995C6", this);} // tgen

static void Test_S3995C6()
{
  extern Class_Descriptor cd_S3995C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3995C6, buf);
    S3995C6 *dp, &lv = *(dp=new (buf) S3995C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3995C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3995C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3995C6");
    test_class_info(&lv, &cd_S3995C6);
    dp->~S3995C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3995C6(Test_S3995C6, "S3995C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3995C6C1Ev();
extern void _ZN7S3995C6D1Ev();
Name_Map name_map_S3995C6[] = {
  NSPAIR(_ZN7S3995C6C1Ev),
  NSPAIR(_ZN7S3995C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3995C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3995C6[];
extern void _ZN7S3995C6D1Ev();
extern void _ZN7S3995C6D0Ev();
extern void _ZN7S3995C63v19Ev();
static  VTBL_ENTRY vtc_S3995C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3995C6[0]),
  (VTBL_ENTRY)&_ZN7S3995C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3995C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3995C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3995C6[];
extern  VTBL_ENTRY _ZTV7S3995C6[];
Class_Descriptor cd_S3995C6 = {  "S3995C6", // class name
  bases_S3995C6, 1,
  &(vtc_S3995C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3995C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3995C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3995C7_nt  {
  int s3995c7f0[2];
  void *s3995c7f1;
  int s3995c7f2;
};
//SIG(-1 S3995C7_nt) C1{ Fi[2] Fp Fi}



//skip512 S3995C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3995C1  : S3995C2 , S3995C6 {
  void *s3995c1f0[3];
  int s3995c1f1;
  void *s3995c1f2;
  ::S3995C7_nt s3995c1f3;
  virtual  ~S3995C1(); // _ZN7S3995C1D1Ev
  virtual void  v1(); // _ZN7S3995C12v1Ev
  virtual void  v2(); // _ZN7S3995C12v2Ev
  virtual void  v3(); // _ZN7S3995C12v3Ev
  virtual void  v4(); // _ZN7S3995C12v4Ev
  virtual void  v5(); // _ZN7S3995C12v5Ev
  S3995C1(); // tgen
};
//SIG(1 S3995C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v6} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v19} vd v1 v2 v3 v4 v5 Fp[3] Fi Fp FC7{ Fi[2] Fp Fi}}


 S3995C1 ::~S3995C1(){ note_dtor("S3995C1", this);}
void  S3995C1 ::v1(){vfunc_called(this, "_ZN7S3995C12v1Ev");}
void  S3995C1 ::v2(){vfunc_called(this, "_ZN7S3995C12v2Ev");}
void  S3995C1 ::v3(){vfunc_called(this, "_ZN7S3995C12v3Ev");}
void  S3995C1 ::v4(){vfunc_called(this, "_ZN7S3995C12v4Ev");}
void  S3995C1 ::v5(){vfunc_called(this, "_ZN7S3995C12v5Ev");}
S3995C1 ::S3995C1(){ note_ctor("S3995C1", this);} // tgen

static void Test_S3995C1()
{
  extern Class_Descriptor cd_S3995C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,29)];
    init_test(&cd_S3995C1, buf);
    S3995C1 *dp, &lv = *(dp=new (buf) S3995C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,112), "sizeof(S3995C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3995C1)");
    /*is_ambiguous_... S3995C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3995C2*), 0, "S3995C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3995C4*)(S3995C2*), ABISELECT(8,4), "S3995C1");
    check_base_class_offset(lv, (S3995C4*)(S3995C2*), ABISELECT(8,4), "S3995C1");
    check_base_class_offset(lv, (S3995C2*), 0, "S3995C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3995C6*), ABISELECT(120,72), "S3995C1");
    check_base_class_offset(lv, (S3995C6*), ABISELECT(120,72), "S3995C1");
    check_field_offset(lv, s3995c1f0, ABISELECT(128,76), "S3995C1.s3995c1f0");
    check_field_offset(lv, s3995c1f1, ABISELECT(152,88), "S3995C1.s3995c1f1");
    check_field_offset(lv, s3995c1f2, ABISELECT(160,92), "S3995C1.s3995c1f2");
    check_field_offset(lv, s3995c1f3, ABISELECT(168,96), "S3995C1.s3995c1f3");
    test_class_info(&lv, &cd_S3995C1);
    dp->~S3995C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3995C1(Test_S3995C1, "S3995C1", ABISELECT(192,112));

#else // __cplusplus

extern void _ZN7S3995C1C1Ev();
extern void _ZN7S3995C1D1Ev();
Name_Map name_map_S3995C1[] = {
  NSPAIR(_ZN7S3995C1C1Ev),
  NSPAIR(_ZN7S3995C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3995C4;
extern VTBL_ENTRY _ZTI7S3995C4[];
extern  VTBL_ENTRY _ZTV7S3995C4[];
extern Class_Descriptor cd_S3995C2;
extern VTBL_ENTRY _ZTI7S3995C2[];
extern  VTBL_ENTRY _ZTV7S3995C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3995C6;
extern VTBL_ENTRY _ZTI7S3995C6[];
extern  VTBL_ENTRY _ZTV7S3995C6[];
static Base_Class bases_S3995C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3995C4,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3995C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3995C6,    ABISELECT(120,72), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3995C1[];
extern void _ZN7S3995C1D1Ev();
extern void _ZN7S3995C1D0Ev();
extern void _ZN7S3995C22v7Ev();
extern void _ZN7S3995C22v8Ev();
extern void _ZN7S3995C22v9Ev();
extern void _ZN7S3995C23v10Ev();
extern void _ZN7S3995C23v11Ev();
extern void _ZN7S3995C23v12Ev();
extern void _ZN7S3995C23v13Ev();
extern void _ZN7S3995C23v14Ev();
extern void _ZN7S3995C23v15Ev();
extern void _ZN7S3995C23v16Ev();
extern void _ZN7S3995C23v17Ev();
extern void _ZN7S3995C23v18Ev();
extern void _ZN7S3995C12v1Ev();
extern void _ZN7S3995C12v2Ev();
extern void _ZN7S3995C12v3Ev();
extern void _ZN7S3995C12v4Ev();
extern void _ZN7S3995C12v5Ev();
extern void ABISELECT(_ZThn8_N7S3995C1D1Ev,_ZThn4_N7S3995C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3995C1D0Ev,_ZThn4_N7S3995C1D0Ev)();
extern void _ZN7S3995C42v6Ev();
extern void ABISELECT(_ZThn120_N7S3995C1D1Ev,_ZThn72_N7S3995C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3995C1D0Ev,_ZThn72_N7S3995C1D0Ev)();
extern void _ZN7S3995C63v19Ev();
static  VTBL_ENTRY vtc_S3995C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3995C1[0]),
  (VTBL_ENTRY)&_ZN7S3995C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3995C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3995C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3995C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3995C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3995C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3995C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3995C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3995C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3995C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3995C12v5Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3995C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3995C1D1Ev,_ZThn4_N7S3995C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3995C1D0Ev,_ZThn4_N7S3995C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3995C42v6Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3995C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3995C1D1Ev,_ZThn72_N7S3995C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3995C1D0Ev,_ZThn72_N7S3995C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3995C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3995C1[];
extern  VTBL_ENTRY _ZTV7S3995C1[];
Class_Descriptor cd_S3995C1 = {  "S3995C1", // class name
  bases_S3995C1, 6,
  &(vtc_S3995C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,112), // object size
  NSPAIRA(_ZTI7S3995C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3995C1),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3994C4  : S4055C3_nt {
  virtual  ~S3994C4(); // _ZN7S3994C4D1Ev
  virtual void  v6(); // _ZN7S3994C42v6Ev
  S3994C4(); // tgen
};
//SIG(-1 S3994C4) C1{ BC2{ vd m} vd v1}


 S3994C4 ::~S3994C4(){ note_dtor("S3994C4", this);}
void  S3994C4 ::v6(){vfunc_called(this, "_ZN7S3994C42v6Ev");}
S3994C4 ::S3994C4(){ note_ctor("S3994C4", this);} // tgen

static void Test_S3994C4()
{
  extern Class_Descriptor cd_S3994C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3994C4, buf);
    S3994C4 *dp, &lv = *(dp=new (buf) S3994C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3994C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3994C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3994C4");
    test_class_info(&lv, &cd_S3994C4);
    dp->~S3994C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3994C4(Test_S3994C4, "S3994C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3994C4C1Ev();
extern void _ZN7S3994C4D1Ev();
Name_Map name_map_S3994C4[] = {
  NSPAIR(_ZN7S3994C4C1Ev),
  NSPAIR(_ZN7S3994C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3994C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3994C4[];
extern void _ZN7S3994C4D1Ev();
extern void _ZN7S3994C4D0Ev();
extern void _ZN7S3994C42v6Ev();
static  VTBL_ENTRY vtc_S3994C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3994C4[0]),
  (VTBL_ENTRY)&_ZN7S3994C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3994C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3994C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3994C4[];
extern  VTBL_ENTRY _ZTV7S3994C4[];
Class_Descriptor cd_S3994C4 = {  "S3994C4", // class name
  bases_S3994C4, 1,
  &(vtc_S3994C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3994C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3994C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3994C2  : S4055C3_nt , S3994C4 {
  void *s3994c2f0[5];
  int s3994c2f1[2];
  ::S14975C17_nt s3994c2f2;
  void *s3994c2f3;
  int s3994c2f4;
  void *s3994c2f5;
  int s3994c2f6[2];
  void *s3994c2f7;
  int s3994c2f8[2];
  virtual  ~S3994C2(); // _ZN7S3994C2D1Ev
  virtual void  v7(); // _ZN7S3994C22v7Ev
  virtual void  v8(); // _ZN7S3994C22v8Ev
  virtual void  v9(); // _ZN7S3994C22v9Ev
  virtual void  v10(); // _ZN7S3994C23v10Ev
  virtual void  v11(); // _ZN7S3994C23v11Ev
  virtual void  v12(); // _ZN7S3994C23v12Ev
  virtual void  v13(); // _ZN7S3994C23v13Ev
  virtual void  v14(); // _ZN7S3994C23v14Ev
  virtual void  v15(); // _ZN7S3994C23v15Ev
  virtual void  v16(); // _ZN7S3994C23v16Ev
  virtual void  v17(); // _ZN7S3994C23v17Ev
  virtual void  v18(); // _ZN7S3994C23v18Ev
  S3994C2(); // tgen
};
//SIG(-1 S3994C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3994C2 ::~S3994C2(){ note_dtor("S3994C2", this);}
void  S3994C2 ::v7(){vfunc_called(this, "_ZN7S3994C22v7Ev");}
void  S3994C2 ::v8(){vfunc_called(this, "_ZN7S3994C22v8Ev");}
void  S3994C2 ::v9(){vfunc_called(this, "_ZN7S3994C22v9Ev");}
void  S3994C2 ::v10(){vfunc_called(this, "_ZN7S3994C23v10Ev");}
void  S3994C2 ::v11(){vfunc_called(this, "_ZN7S3994C23v11Ev");}
void  S3994C2 ::v12(){vfunc_called(this, "_ZN7S3994C23v12Ev");}
void  S3994C2 ::v13(){vfunc_called(this, "_ZN7S3994C23v13Ev");}
void  S3994C2 ::v14(){vfunc_called(this, "_ZN7S3994C23v14Ev");}
void  S3994C2 ::v15(){vfunc_called(this, "_ZN7S3994C23v15Ev");}
void  S3994C2 ::v16(){vfunc_called(this, "_ZN7S3994C23v16Ev");}
void  S3994C2 ::v17(){vfunc_called(this, "_ZN7S3994C23v17Ev");}
void  S3994C2 ::v18(){vfunc_called(this, "_ZN7S3994C23v18Ev");}
S3994C2 ::S3994C2(){ note_ctor("S3994C2", this);} // tgen

static void Test_S3994C2()
{
  extern Class_Descriptor cd_S3994C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3994C2, buf);
    S3994C2 *dp, &lv = *(dp=new (buf) S3994C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3994C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3994C2)");
    /*is_ambiguous_... S3994C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3994C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3994C4*), ABISELECT(8,4), "S3994C2");
    check_base_class_offset(lv, (S3994C4*), ABISELECT(8,4), "S3994C2");
    check_field_offset(lv, s3994c2f0, ABISELECT(16,8), "S3994C2.s3994c2f0");
    check_field_offset(lv, s3994c2f1, ABISELECT(56,28), "S3994C2.s3994c2f1");
    check_field_offset(lv, s3994c2f2, ABISELECT(64,36), "S3994C2.s3994c2f2");
    check_field_offset(lv, s3994c2f3, ABISELECT(72,40), "S3994C2.s3994c2f3");
    check_field_offset(lv, s3994c2f4, ABISELECT(80,44), "S3994C2.s3994c2f4");
    check_field_offset(lv, s3994c2f5, ABISELECT(88,48), "S3994C2.s3994c2f5");
    check_field_offset(lv, s3994c2f6, ABISELECT(96,52), "S3994C2.s3994c2f6");
    check_field_offset(lv, s3994c2f7, ABISELECT(104,60), "S3994C2.s3994c2f7");
    check_field_offset(lv, s3994c2f8, ABISELECT(112,64), "S3994C2.s3994c2f8");
    test_class_info(&lv, &cd_S3994C2);
    dp->~S3994C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3994C2(Test_S3994C2, "S3994C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3994C2C1Ev();
extern void _ZN7S3994C2D1Ev();
Name_Map name_map_S3994C2[] = {
  NSPAIR(_ZN7S3994C2C1Ev),
  NSPAIR(_ZN7S3994C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3994C4;
extern VTBL_ENTRY _ZTI7S3994C4[];
extern  VTBL_ENTRY _ZTV7S3994C4[];
static Base_Class bases_S3994C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3994C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3994C2[];
extern void _ZN7S3994C2D1Ev();
extern void _ZN7S3994C2D0Ev();
extern void _ZN7S3994C22v7Ev();
extern void _ZN7S3994C22v8Ev();
extern void _ZN7S3994C22v9Ev();
extern void _ZN7S3994C23v10Ev();
extern void _ZN7S3994C23v11Ev();
extern void _ZN7S3994C23v12Ev();
extern void _ZN7S3994C23v13Ev();
extern void _ZN7S3994C23v14Ev();
extern void _ZN7S3994C23v15Ev();
extern void _ZN7S3994C23v16Ev();
extern void _ZN7S3994C23v17Ev();
extern void _ZN7S3994C23v18Ev();
extern void ABISELECT(_ZThn8_N7S3994C2D1Ev,_ZThn4_N7S3994C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3994C2D0Ev,_ZThn4_N7S3994C2D0Ev)();
extern void _ZN7S3994C42v6Ev();
static  VTBL_ENTRY vtc_S3994C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3994C2[0]),
  (VTBL_ENTRY)&_ZN7S3994C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3994C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3994C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3994C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3994C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v18Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3994C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3994C2D1Ev,_ZThn4_N7S3994C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3994C2D0Ev,_ZThn4_N7S3994C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3994C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3994C2[];
extern  VTBL_ENTRY _ZTV7S3994C2[];
Class_Descriptor cd_S3994C2 = {  "S3994C2", // class name
  bases_S3994C2, 3,
  &(vtc_S3994C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3994C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3994C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3994C6  : S4055C3_nt {
  virtual  ~S3994C6(); // _ZN7S3994C6D1Ev
  virtual void  v19(); // _ZN7S3994C63v19Ev
  S3994C6(); // tgen
};
//SIG(-1 S3994C6) C1{ BC2{ vd m} vd v1}


 S3994C6 ::~S3994C6(){ note_dtor("S3994C6", this);}
void  S3994C6 ::v19(){vfunc_called(this, "_ZN7S3994C63v19Ev");}
S3994C6 ::S3994C6(){ note_ctor("S3994C6", this);} // tgen

static void Test_S3994C6()
{
  extern Class_Descriptor cd_S3994C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3994C6, buf);
    S3994C6 *dp, &lv = *(dp=new (buf) S3994C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3994C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3994C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3994C6");
    test_class_info(&lv, &cd_S3994C6);
    dp->~S3994C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3994C6(Test_S3994C6, "S3994C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3994C6C1Ev();
extern void _ZN7S3994C6D1Ev();
Name_Map name_map_S3994C6[] = {
  NSPAIR(_ZN7S3994C6C1Ev),
  NSPAIR(_ZN7S3994C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3994C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3994C6[];
extern void _ZN7S3994C6D1Ev();
extern void _ZN7S3994C6D0Ev();
extern void _ZN7S3994C63v19Ev();
static  VTBL_ENTRY vtc_S3994C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3994C6[0]),
  (VTBL_ENTRY)&_ZN7S3994C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3994C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3994C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3994C6[];
extern  VTBL_ENTRY _ZTV7S3994C6[];
Class_Descriptor cd_S3994C6 = {  "S3994C6", // class name
  bases_S3994C6, 1,
  &(vtc_S3994C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3994C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3994C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3994C7  {
  int s3994c7f0;
  ::S12844C15_nt s3994c7f1;
  ::S15054C13_nt s3994c7f2;
};
//SIG(-1 S3994C7) C1{ Fi FC2{ Fi} FC3{ FL}}



static void Test_S3994C7()
{
  {
    init_simple_test("S3994C7");
    S3994C7 lv;
    check2(sizeof(lv), 16, "sizeof(S3994C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3994C7)");
    check_field_offset(lv, s3994c7f0, 0, "S3994C7.s3994c7f0");
    check_field_offset(lv, s3994c7f1, 4, "S3994C7.s3994c7f1");
    check_field_offset(lv, s3994c7f2, 8, "S3994C7.s3994c7f2");
  }
}
static Arrange_To_Call_Me vS3994C7(Test_S3994C7, "S3994C7", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3994C1  : S3994C2 , S3994C6 {
  void *s3994c1f0[3];
  ::S3994C7 s3994c1f1;
  virtual  ~S3994C1(); // _ZN7S3994C1D1Ev
  virtual void  v1(); // _ZN7S3994C12v1Ev
  virtual void  v2(); // _ZN7S3994C12v2Ev
  virtual void  v3(); // _ZN7S3994C12v3Ev
  virtual void  v4(); // _ZN7S3994C12v4Ev
  virtual void  v5(); // _ZN7S3994C12v5Ev
  S3994C1(); // tgen
};
//SIG(1 S3994C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v6} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v19} vd v1 v2 v3 v4 v5 Fp[3] FC7{ Fi FC8{ Fi} FC9{ FL}}}


 S3994C1 ::~S3994C1(){ note_dtor("S3994C1", this);}
void  S3994C1 ::v1(){vfunc_called(this, "_ZN7S3994C12v1Ev");}
void  S3994C1 ::v2(){vfunc_called(this, "_ZN7S3994C12v2Ev");}
void  S3994C1 ::v3(){vfunc_called(this, "_ZN7S3994C12v3Ev");}
void  S3994C1 ::v4(){vfunc_called(this, "_ZN7S3994C12v4Ev");}
void  S3994C1 ::v5(){vfunc_called(this, "_ZN7S3994C12v5Ev");}
S3994C1 ::S3994C1(){ note_ctor("S3994C1", this);} // tgen

static void Test_S3994C1()
{
  extern Class_Descriptor cd_S3994C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,27)];
    init_test(&cd_S3994C1, buf);
    S3994C1 *dp, &lv = *(dp=new (buf) S3994C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,104), "sizeof(S3994C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3994C1)");
    /*is_ambiguous_... S3994C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3994C2*), 0, "S3994C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3994C4*)(S3994C2*), ABISELECT(8,4), "S3994C1");
    check_base_class_offset(lv, (S3994C4*)(S3994C2*), ABISELECT(8,4), "S3994C1");
    check_base_class_offset(lv, (S3994C2*), 0, "S3994C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3994C6*), ABISELECT(120,72), "S3994C1");
    check_base_class_offset(lv, (S3994C6*), ABISELECT(120,72), "S3994C1");
    check_field_offset(lv, s3994c1f0, ABISELECT(128,76), "S3994C1.s3994c1f0");
    check_field_offset(lv, s3994c1f1, ABISELECT(152,88), "S3994C1.s3994c1f1");
    test_class_info(&lv, &cd_S3994C1);
    dp->~S3994C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3994C1(Test_S3994C1, "S3994C1", ABISELECT(168,104));

#else // __cplusplus

extern void _ZN7S3994C1C1Ev();
extern void _ZN7S3994C1D1Ev();
Name_Map name_map_S3994C1[] = {
  NSPAIR(_ZN7S3994C1C1Ev),
  NSPAIR(_ZN7S3994C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3994C4;
extern VTBL_ENTRY _ZTI7S3994C4[];
extern  VTBL_ENTRY _ZTV7S3994C4[];
extern Class_Descriptor cd_S3994C2;
extern VTBL_ENTRY _ZTI7S3994C2[];
extern  VTBL_ENTRY _ZTV7S3994C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3994C6;
extern VTBL_ENTRY _ZTI7S3994C6[];
extern  VTBL_ENTRY _ZTV7S3994C6[];
static Base_Class bases_S3994C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3994C4,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3994C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3994C6,    ABISELECT(120,72), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3994C1[];
extern void _ZN7S3994C1D1Ev();
extern void _ZN7S3994C1D0Ev();
extern void _ZN7S3994C22v7Ev();
extern void _ZN7S3994C22v8Ev();
extern void _ZN7S3994C22v9Ev();
extern void _ZN7S3994C23v10Ev();
extern void _ZN7S3994C23v11Ev();
extern void _ZN7S3994C23v12Ev();
extern void _ZN7S3994C23v13Ev();
extern void _ZN7S3994C23v14Ev();
extern void _ZN7S3994C23v15Ev();
extern void _ZN7S3994C23v16Ev();
extern void _ZN7S3994C23v17Ev();
extern void _ZN7S3994C23v18Ev();
extern void _ZN7S3994C12v1Ev();
extern void _ZN7S3994C12v2Ev();
extern void _ZN7S3994C12v3Ev();
extern void _ZN7S3994C12v4Ev();
extern void _ZN7S3994C12v5Ev();
extern void ABISELECT(_ZThn8_N7S3994C1D1Ev,_ZThn4_N7S3994C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3994C1D0Ev,_ZThn4_N7S3994C1D0Ev)();
extern void _ZN7S3994C42v6Ev();
extern void ABISELECT(_ZThn120_N7S3994C1D1Ev,_ZThn72_N7S3994C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3994C1D0Ev,_ZThn72_N7S3994C1D0Ev)();
extern void _ZN7S3994C63v19Ev();
static  VTBL_ENTRY vtc_S3994C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3994C1[0]),
  (VTBL_ENTRY)&_ZN7S3994C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3994C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3994C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3994C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3994C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3994C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3994C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3994C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3994C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3994C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3994C12v5Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3994C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3994C1D1Ev,_ZThn4_N7S3994C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3994C1D0Ev,_ZThn4_N7S3994C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3994C42v6Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3994C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3994C1D1Ev,_ZThn72_N7S3994C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3994C1D0Ev,_ZThn72_N7S3994C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3994C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3994C1[];
extern  VTBL_ENTRY _ZTV7S3994C1[];
Class_Descriptor cd_S3994C1 = {  "S3994C1", // class name
  bases_S3994C1, 6,
  &(vtc_S3994C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,104), // object size
  NSPAIRA(_ZTI7S3994C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3994C1),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3993C4  : S4055C3_nt {
  virtual  ~S3993C4(); // _ZN7S3993C4D1Ev
  virtual void  v6(); // _ZN7S3993C42v6Ev
  S3993C4(); // tgen
};
//SIG(-1 S3993C4) C1{ BC2{ vd m} vd v1}


 S3993C4 ::~S3993C4(){ note_dtor("S3993C4", this);}
void  S3993C4 ::v6(){vfunc_called(this, "_ZN7S3993C42v6Ev");}
S3993C4 ::S3993C4(){ note_ctor("S3993C4", this);} // tgen

static void Test_S3993C4()
{
  extern Class_Descriptor cd_S3993C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3993C4, buf);
    S3993C4 *dp, &lv = *(dp=new (buf) S3993C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3993C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3993C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3993C4");
    test_class_info(&lv, &cd_S3993C4);
    dp->~S3993C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3993C4(Test_S3993C4, "S3993C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3993C4C1Ev();
extern void _ZN7S3993C4D1Ev();
Name_Map name_map_S3993C4[] = {
  NSPAIR(_ZN7S3993C4C1Ev),
  NSPAIR(_ZN7S3993C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3993C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3993C4[];
extern void _ZN7S3993C4D1Ev();
extern void _ZN7S3993C4D0Ev();
extern void _ZN7S3993C42v6Ev();
static  VTBL_ENTRY vtc_S3993C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3993C4[0]),
  (VTBL_ENTRY)&_ZN7S3993C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3993C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3993C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3993C4[];
extern  VTBL_ENTRY _ZTV7S3993C4[];
Class_Descriptor cd_S3993C4 = {  "S3993C4", // class name
  bases_S3993C4, 1,
  &(vtc_S3993C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3993C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3993C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3993C2  : S4055C3_nt , S3993C4 {
  void *s3993c2f0[5];
  int s3993c2f1[2];
  ::S14975C17_nt s3993c2f2;
  void *s3993c2f3;
  int s3993c2f4;
  void *s3993c2f5;
  int s3993c2f6[2];
  void *s3993c2f7;
  int s3993c2f8[2];
  virtual  ~S3993C2(); // _ZN7S3993C2D1Ev
  virtual void  v7(); // _ZN7S3993C22v7Ev
  virtual void  v8(); // _ZN7S3993C22v8Ev
  virtual void  v9(); // _ZN7S3993C22v9Ev
  virtual void  v10(); // _ZN7S3993C23v10Ev
  virtual void  v11(); // _ZN7S3993C23v11Ev
  virtual void  v12(); // _ZN7S3993C23v12Ev
  virtual void  v13(); // _ZN7S3993C23v13Ev
  virtual void  v14(); // _ZN7S3993C23v14Ev
  virtual void  v15(); // _ZN7S3993C23v15Ev
  virtual void  v16(); // _ZN7S3993C23v16Ev
  virtual void  v17(); // _ZN7S3993C23v17Ev
  virtual void  v18(); // _ZN7S3993C23v18Ev
  S3993C2(); // tgen
};
//SIG(-1 S3993C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3993C2 ::~S3993C2(){ note_dtor("S3993C2", this);}
void  S3993C2 ::v7(){vfunc_called(this, "_ZN7S3993C22v7Ev");}
void  S3993C2 ::v8(){vfunc_called(this, "_ZN7S3993C22v8Ev");}
void  S3993C2 ::v9(){vfunc_called(this, "_ZN7S3993C22v9Ev");}
void  S3993C2 ::v10(){vfunc_called(this, "_ZN7S3993C23v10Ev");}
void  S3993C2 ::v11(){vfunc_called(this, "_ZN7S3993C23v11Ev");}
void  S3993C2 ::v12(){vfunc_called(this, "_ZN7S3993C23v12Ev");}
void  S3993C2 ::v13(){vfunc_called(this, "_ZN7S3993C23v13Ev");}
void  S3993C2 ::v14(){vfunc_called(this, "_ZN7S3993C23v14Ev");}
void  S3993C2 ::v15(){vfunc_called(this, "_ZN7S3993C23v15Ev");}
void  S3993C2 ::v16(){vfunc_called(this, "_ZN7S3993C23v16Ev");}
void  S3993C2 ::v17(){vfunc_called(this, "_ZN7S3993C23v17Ev");}
void  S3993C2 ::v18(){vfunc_called(this, "_ZN7S3993C23v18Ev");}
S3993C2 ::S3993C2(){ note_ctor("S3993C2", this);} // tgen

static void Test_S3993C2()
{
  extern Class_Descriptor cd_S3993C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3993C2, buf);
    S3993C2 *dp, &lv = *(dp=new (buf) S3993C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3993C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3993C2)");
    /*is_ambiguous_... S3993C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3993C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3993C4*), ABISELECT(8,4), "S3993C2");
    check_base_class_offset(lv, (S3993C4*), ABISELECT(8,4), "S3993C2");
    check_field_offset(lv, s3993c2f0, ABISELECT(16,8), "S3993C2.s3993c2f0");
    check_field_offset(lv, s3993c2f1, ABISELECT(56,28), "S3993C2.s3993c2f1");
    check_field_offset(lv, s3993c2f2, ABISELECT(64,36), "S3993C2.s3993c2f2");
    check_field_offset(lv, s3993c2f3, ABISELECT(72,40), "S3993C2.s3993c2f3");
    check_field_offset(lv, s3993c2f4, ABISELECT(80,44), "S3993C2.s3993c2f4");
    check_field_offset(lv, s3993c2f5, ABISELECT(88,48), "S3993C2.s3993c2f5");
    check_field_offset(lv, s3993c2f6, ABISELECT(96,52), "S3993C2.s3993c2f6");
    check_field_offset(lv, s3993c2f7, ABISELECT(104,60), "S3993C2.s3993c2f7");
    check_field_offset(lv, s3993c2f8, ABISELECT(112,64), "S3993C2.s3993c2f8");
    test_class_info(&lv, &cd_S3993C2);
    dp->~S3993C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3993C2(Test_S3993C2, "S3993C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3993C2C1Ev();
extern void _ZN7S3993C2D1Ev();
Name_Map name_map_S3993C2[] = {
  NSPAIR(_ZN7S3993C2C1Ev),
  NSPAIR(_ZN7S3993C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3993C4;
extern VTBL_ENTRY _ZTI7S3993C4[];
extern  VTBL_ENTRY _ZTV7S3993C4[];
static Base_Class bases_S3993C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3993C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3993C2[];
extern void _ZN7S3993C2D1Ev();
extern void _ZN7S3993C2D0Ev();
extern void _ZN7S3993C22v7Ev();
extern void _ZN7S3993C22v8Ev();
extern void _ZN7S3993C22v9Ev();
extern void _ZN7S3993C23v10Ev();
extern void _ZN7S3993C23v11Ev();
extern void _ZN7S3993C23v12Ev();
extern void _ZN7S3993C23v13Ev();
extern void _ZN7S3993C23v14Ev();
extern void _ZN7S3993C23v15Ev();
extern void _ZN7S3993C23v16Ev();
extern void _ZN7S3993C23v17Ev();
extern void _ZN7S3993C23v18Ev();
extern void ABISELECT(_ZThn8_N7S3993C2D1Ev,_ZThn4_N7S3993C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3993C2D0Ev,_ZThn4_N7S3993C2D0Ev)();
extern void _ZN7S3993C42v6Ev();
static  VTBL_ENTRY vtc_S3993C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3993C2[0]),
  (VTBL_ENTRY)&_ZN7S3993C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3993C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3993C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3993C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3993C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v18Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3993C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3993C2D1Ev,_ZThn4_N7S3993C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3993C2D0Ev,_ZThn4_N7S3993C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3993C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3993C2[];
extern  VTBL_ENTRY _ZTV7S3993C2[];
Class_Descriptor cd_S3993C2 = {  "S3993C2", // class name
  bases_S3993C2, 3,
  &(vtc_S3993C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3993C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3993C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3993C6  : S4055C3_nt {
  virtual  ~S3993C6(); // _ZN7S3993C6D1Ev
  virtual void  v19(); // _ZN7S3993C63v19Ev
  S3993C6(); // tgen
};
//SIG(-1 S3993C6) C1{ BC2{ vd m} vd v1}


 S3993C6 ::~S3993C6(){ note_dtor("S3993C6", this);}
void  S3993C6 ::v19(){vfunc_called(this, "_ZN7S3993C63v19Ev");}
S3993C6 ::S3993C6(){ note_ctor("S3993C6", this);} // tgen

static void Test_S3993C6()
{
  extern Class_Descriptor cd_S3993C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3993C6, buf);
    S3993C6 *dp, &lv = *(dp=new (buf) S3993C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3993C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3993C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3993C6");
    test_class_info(&lv, &cd_S3993C6);
    dp->~S3993C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3993C6(Test_S3993C6, "S3993C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3993C6C1Ev();
extern void _ZN7S3993C6D1Ev();
Name_Map name_map_S3993C6[] = {
  NSPAIR(_ZN7S3993C6C1Ev),
  NSPAIR(_ZN7S3993C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3993C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3993C6[];
extern void _ZN7S3993C6D1Ev();
extern void _ZN7S3993C6D0Ev();
extern void _ZN7S3993C63v19Ev();
static  VTBL_ENTRY vtc_S3993C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3993C6[0]),
  (VTBL_ENTRY)&_ZN7S3993C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3993C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3993C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3993C6[];
extern  VTBL_ENTRY _ZTV7S3993C6[];
Class_Descriptor cd_S3993C6 = {  "S3993C6", // class name
  bases_S3993C6, 1,
  &(vtc_S3993C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3993C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3993C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3993C7  {
  int s3993c7f0;
  ::S12844C15_nt s3993c7f1;
  ::S15053C13_nt s3993c7f2;
};
//SIG(-1 S3993C7) C1{ Fi FC2{ Fi} FC3{ Fl}}



static void Test_S3993C7()
{
  {
    init_simple_test("S3993C7");
    S3993C7 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3993C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3993C7)");
    check_field_offset(lv, s3993c7f0, 0, "S3993C7.s3993c7f0");
    check_field_offset(lv, s3993c7f1, 4, "S3993C7.s3993c7f1");
    check_field_offset(lv, s3993c7f2, 8, "S3993C7.s3993c7f2");
  }
}
static Arrange_To_Call_Me vS3993C7(Test_S3993C7, "S3993C7", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3993C1  : S3993C2 , S3993C6 {
  void *s3993c1f0[3];
  ::S3993C7 s3993c1f1;
  virtual  ~S3993C1(); // _ZN7S3993C1D1Ev
  virtual void  v1(); // _ZN7S3993C12v1Ev
  virtual void  v2(); // _ZN7S3993C12v2Ev
  virtual void  v3(); // _ZN7S3993C12v3Ev
  virtual void  v4(); // _ZN7S3993C12v4Ev
  virtual void  v5(); // _ZN7S3993C12v5Ev
  S3993C1(); // tgen
};
//SIG(1 S3993C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v6} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v19} vd v1 v2 v3 v4 v5 Fp[3] FC7{ Fi FC8{ Fi} FC9{ Fl}}}


 S3993C1 ::~S3993C1(){ note_dtor("S3993C1", this);}
void  S3993C1 ::v1(){vfunc_called(this, "_ZN7S3993C12v1Ev");}
void  S3993C1 ::v2(){vfunc_called(this, "_ZN7S3993C12v2Ev");}
void  S3993C1 ::v3(){vfunc_called(this, "_ZN7S3993C12v3Ev");}
void  S3993C1 ::v4(){vfunc_called(this, "_ZN7S3993C12v4Ev");}
void  S3993C1 ::v5(){vfunc_called(this, "_ZN7S3993C12v5Ev");}
S3993C1 ::S3993C1(){ note_ctor("S3993C1", this);} // tgen

static void Test_S3993C1()
{
  extern Class_Descriptor cd_S3993C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,26)];
    init_test(&cd_S3993C1, buf);
    S3993C1 *dp, &lv = *(dp=new (buf) S3993C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,100), "sizeof(S3993C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3993C1)");
    /*is_ambiguous_... S3993C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3993C2*), 0, "S3993C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3993C4*)(S3993C2*), ABISELECT(8,4), "S3993C1");
    check_base_class_offset(lv, (S3993C4*)(S3993C2*), ABISELECT(8,4), "S3993C1");
    check_base_class_offset(lv, (S3993C2*), 0, "S3993C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3993C6*), ABISELECT(120,72), "S3993C1");
    check_base_class_offset(lv, (S3993C6*), ABISELECT(120,72), "S3993C1");
    check_field_offset(lv, s3993c1f0, ABISELECT(128,76), "S3993C1.s3993c1f0");
    check_field_offset(lv, s3993c1f1, ABISELECT(152,88), "S3993C1.s3993c1f1");
    test_class_info(&lv, &cd_S3993C1);
    dp->~S3993C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3993C1(Test_S3993C1, "S3993C1", ABISELECT(168,100));

#else // __cplusplus

extern void _ZN7S3993C1C1Ev();
extern void _ZN7S3993C1D1Ev();
Name_Map name_map_S3993C1[] = {
  NSPAIR(_ZN7S3993C1C1Ev),
  NSPAIR(_ZN7S3993C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3993C4;
extern VTBL_ENTRY _ZTI7S3993C4[];
extern  VTBL_ENTRY _ZTV7S3993C4[];
extern Class_Descriptor cd_S3993C2;
extern VTBL_ENTRY _ZTI7S3993C2[];
extern  VTBL_ENTRY _ZTV7S3993C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3993C6;
extern VTBL_ENTRY _ZTI7S3993C6[];
extern  VTBL_ENTRY _ZTV7S3993C6[];
static Base_Class bases_S3993C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3993C4,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3993C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3993C6,    ABISELECT(120,72), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3993C1[];
extern void _ZN7S3993C1D1Ev();
extern void _ZN7S3993C1D0Ev();
extern void _ZN7S3993C22v7Ev();
extern void _ZN7S3993C22v8Ev();
extern void _ZN7S3993C22v9Ev();
extern void _ZN7S3993C23v10Ev();
extern void _ZN7S3993C23v11Ev();
extern void _ZN7S3993C23v12Ev();
extern void _ZN7S3993C23v13Ev();
extern void _ZN7S3993C23v14Ev();
extern void _ZN7S3993C23v15Ev();
extern void _ZN7S3993C23v16Ev();
extern void _ZN7S3993C23v17Ev();
extern void _ZN7S3993C23v18Ev();
extern void _ZN7S3993C12v1Ev();
extern void _ZN7S3993C12v2Ev();
extern void _ZN7S3993C12v3Ev();
extern void _ZN7S3993C12v4Ev();
extern void _ZN7S3993C12v5Ev();
extern void ABISELECT(_ZThn8_N7S3993C1D1Ev,_ZThn4_N7S3993C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3993C1D0Ev,_ZThn4_N7S3993C1D0Ev)();
extern void _ZN7S3993C42v6Ev();
extern void ABISELECT(_ZThn120_N7S3993C1D1Ev,_ZThn72_N7S3993C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3993C1D0Ev,_ZThn72_N7S3993C1D0Ev)();
extern void _ZN7S3993C63v19Ev();
static  VTBL_ENTRY vtc_S3993C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3993C1[0]),
  (VTBL_ENTRY)&_ZN7S3993C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3993C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3993C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3993C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3993C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3993C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3993C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3993C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3993C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3993C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3993C12v5Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3993C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3993C1D1Ev,_ZThn4_N7S3993C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3993C1D0Ev,_ZThn4_N7S3993C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3993C42v6Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3993C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3993C1D1Ev,_ZThn72_N7S3993C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3993C1D0Ev,_ZThn72_N7S3993C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3993C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3993C1[];
extern  VTBL_ENTRY _ZTV7S3993C1[];
Class_Descriptor cd_S3993C1 = {  "S3993C1", // class name
  bases_S3993C1, 6,
  &(vtc_S3993C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,100), // object size
  NSPAIRA(_ZTI7S3993C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3993C1),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7980C1  : S7924C2_nt {
  void *s7980c1f0[2];
  ::S5330C25 s7980c1f1;
  int s7980c1f2;
  ::S8663C7_nt s7980c1f3;
  char s7980c1f4;
  ~S7980C1(); // tgen
  S7980C1(); // tgen
};
//SIG(1 S7980C1) C1{ BC2{ vd m FC3{ m Fp Fi FC4{ m} FC4} FC5{ m Fp Fi FC6{ m} FC6} Fc} Fp[2] FC3 Fi FC7{ vd v1 v2 FC8{ m Fp Fi[2] FC9{ m}} FC10{ m Fi[4]}[3] Fp[2] Fi Fc} Fc}


S7980C1 ::~S7980C1(){ note_dtor("S7980C1", this);} // tgen
S7980C1 ::S7980C1(){ note_ctor("S7980C1", this);} // tgen

static void Test_S7980C1()
{
  extern Class_Descriptor cd_S7980C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,37)];
    init_test(&cd_S7980C1, buf);
    S7980C1 *dp, &lv = *(dp=new (buf) S7980C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,144), "sizeof(S7980C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7980C1)");
    check_base_class_offset(lv, (S7924C2_nt*), 0, "S7980C1");
    check_field_offset(lv, s7980c1f0, ABISELECT(48,32), "S7980C1.s7980c1f0");
    check_field_offset(lv, s7980c1f1, ABISELECT(64,40), "S7980C1.s7980c1f1");
    check_field_offset(lv, s7980c1f2, ABISELECT(80,52), "S7980C1.s7980c1f2");
    check_field_offset(lv, s7980c1f3, ABISELECT(88,56), "S7980C1.s7980c1f3");
    check_field_offset(lv, s7980c1f4, ABISELECT(192,140), "S7980C1.s7980c1f4");
    test_class_info(&lv, &cd_S7980C1);
    dp->~S7980C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7980C1(Test_S7980C1, "S7980C1", ABISELECT(200,144));

#else // __cplusplus

extern void _ZN7S7980C1C1Ev();
extern void _ZN7S7980C1D1Ev();
Name_Map name_map_S7980C1[] = {
  NSPAIR(_ZN7S7980C1C1Ev),
  NSPAIR(_ZN7S7980C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7924C2_nt;
extern VTBL_ENTRY _ZTI10S7924C2_nt[];
extern  VTBL_ENTRY _ZTV10S7924C2_nt[];
static Base_Class bases_S7980C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7924C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7980C1[];
extern void _ZN7S7980C1D1Ev();
extern void _ZN7S7980C1D0Ev();
static  VTBL_ENTRY vtc_S7980C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7980C1[0]),
  (VTBL_ENTRY)&_ZN7S7980C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7980C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S7980C1[];
extern  VTBL_ENTRY _ZTV7S7980C1[];
Class_Descriptor cd_S7980C1 = {  "S7980C1", // class name
  bases_S7980C1, 1,
  &(vtc_S7980C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(200,144), // object size
  NSPAIRA(_ZTI7S7980C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7980C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3987C4  : S4055C3_nt {
  virtual  ~S3987C4(); // _ZN7S3987C4D1Ev
  virtual void  v5(); // _ZN7S3987C42v5Ev
  S3987C4(); // tgen
};
//SIG(-1 S3987C4) C1{ BC2{ vd m} vd v1}


 S3987C4 ::~S3987C4(){ note_dtor("S3987C4", this);}
void  S3987C4 ::v5(){vfunc_called(this, "_ZN7S3987C42v5Ev");}
S3987C4 ::S3987C4(){ note_ctor("S3987C4", this);} // tgen

static void Test_S3987C4()
{
  extern Class_Descriptor cd_S3987C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3987C4, buf);
    S3987C4 *dp, &lv = *(dp=new (buf) S3987C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3987C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3987C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3987C4");
    test_class_info(&lv, &cd_S3987C4);
    dp->~S3987C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3987C4(Test_S3987C4, "S3987C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3987C4C1Ev();
extern void _ZN7S3987C4D1Ev();
Name_Map name_map_S3987C4[] = {
  NSPAIR(_ZN7S3987C4C1Ev),
  NSPAIR(_ZN7S3987C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3987C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3987C4[];
extern void _ZN7S3987C4D1Ev();
extern void _ZN7S3987C4D0Ev();
extern void _ZN7S3987C42v5Ev();
static  VTBL_ENTRY vtc_S3987C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3987C4[0]),
  (VTBL_ENTRY)&_ZN7S3987C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3987C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3987C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3987C4[];
extern  VTBL_ENTRY _ZTV7S3987C4[];
Class_Descriptor cd_S3987C4 = {  "S3987C4", // class name
  bases_S3987C4, 1,
  &(vtc_S3987C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3987C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3987C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3987C2  : S4055C3_nt , S3987C4 {
  void *s3987c2f0[5];
  int s3987c2f1[2];
  ::S14975C17_nt s3987c2f2;
  void *s3987c2f3;
  int s3987c2f4;
  void *s3987c2f5;
  int s3987c2f6[2];
  void *s3987c2f7;
  int s3987c2f8[2];
  virtual  ~S3987C2(); // _ZN7S3987C2D1Ev
  virtual void  v6(); // _ZN7S3987C22v6Ev
  virtual void  v7(); // _ZN7S3987C22v7Ev
  virtual void  v8(); // _ZN7S3987C22v8Ev
  virtual void  v9(); // _ZN7S3987C22v9Ev
  virtual void  v10(); // _ZN7S3987C23v10Ev
  virtual void  v11(); // _ZN7S3987C23v11Ev
  virtual void  v12(); // _ZN7S3987C23v12Ev
  virtual void  v13(); // _ZN7S3987C23v13Ev
  virtual void  v14(); // _ZN7S3987C23v14Ev
  virtual void  v15(); // _ZN7S3987C23v15Ev
  virtual void  v16(); // _ZN7S3987C23v16Ev
  virtual void  v17(); // _ZN7S3987C23v17Ev
  S3987C2(); // tgen
};
//SIG(-1 S3987C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3987C2 ::~S3987C2(){ note_dtor("S3987C2", this);}
void  S3987C2 ::v6(){vfunc_called(this, "_ZN7S3987C22v6Ev");}
void  S3987C2 ::v7(){vfunc_called(this, "_ZN7S3987C22v7Ev");}
void  S3987C2 ::v8(){vfunc_called(this, "_ZN7S3987C22v8Ev");}
void  S3987C2 ::v9(){vfunc_called(this, "_ZN7S3987C22v9Ev");}
void  S3987C2 ::v10(){vfunc_called(this, "_ZN7S3987C23v10Ev");}
void  S3987C2 ::v11(){vfunc_called(this, "_ZN7S3987C23v11Ev");}
void  S3987C2 ::v12(){vfunc_called(this, "_ZN7S3987C23v12Ev");}
void  S3987C2 ::v13(){vfunc_called(this, "_ZN7S3987C23v13Ev");}
void  S3987C2 ::v14(){vfunc_called(this, "_ZN7S3987C23v14Ev");}
void  S3987C2 ::v15(){vfunc_called(this, "_ZN7S3987C23v15Ev");}
void  S3987C2 ::v16(){vfunc_called(this, "_ZN7S3987C23v16Ev");}
void  S3987C2 ::v17(){vfunc_called(this, "_ZN7S3987C23v17Ev");}
S3987C2 ::S3987C2(){ note_ctor("S3987C2", this);} // tgen

static void Test_S3987C2()
{
  extern Class_Descriptor cd_S3987C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3987C2, buf);
    S3987C2 *dp, &lv = *(dp=new (buf) S3987C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3987C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3987C2)");
    /*is_ambiguous_... S3987C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3987C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3987C4*), ABISELECT(8,4), "S3987C2");
    check_base_class_offset(lv, (S3987C4*), ABISELECT(8,4), "S3987C2");
    check_field_offset(lv, s3987c2f0, ABISELECT(16,8), "S3987C2.s3987c2f0");
    check_field_offset(lv, s3987c2f1, ABISELECT(56,28), "S3987C2.s3987c2f1");
    check_field_offset(lv, s3987c2f2, ABISELECT(64,36), "S3987C2.s3987c2f2");
    check_field_offset(lv, s3987c2f3, ABISELECT(72,40), "S3987C2.s3987c2f3");
    check_field_offset(lv, s3987c2f4, ABISELECT(80,44), "S3987C2.s3987c2f4");
    check_field_offset(lv, s3987c2f5, ABISELECT(88,48), "S3987C2.s3987c2f5");
    check_field_offset(lv, s3987c2f6, ABISELECT(96,52), "S3987C2.s3987c2f6");
    check_field_offset(lv, s3987c2f7, ABISELECT(104,60), "S3987C2.s3987c2f7");
    check_field_offset(lv, s3987c2f8, ABISELECT(112,64), "S3987C2.s3987c2f8");
    test_class_info(&lv, &cd_S3987C2);
    dp->~S3987C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3987C2(Test_S3987C2, "S3987C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3987C2C1Ev();
extern void _ZN7S3987C2D1Ev();
Name_Map name_map_S3987C2[] = {
  NSPAIR(_ZN7S3987C2C1Ev),
  NSPAIR(_ZN7S3987C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3987C4;
extern VTBL_ENTRY _ZTI7S3987C4[];
extern  VTBL_ENTRY _ZTV7S3987C4[];
static Base_Class bases_S3987C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3987C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3987C2[];
extern void _ZN7S3987C2D1Ev();
extern void _ZN7S3987C2D0Ev();
extern void _ZN7S3987C22v6Ev();
extern void _ZN7S3987C22v7Ev();
extern void _ZN7S3987C22v8Ev();
extern void _ZN7S3987C22v9Ev();
extern void _ZN7S3987C23v10Ev();
extern void _ZN7S3987C23v11Ev();
extern void _ZN7S3987C23v12Ev();
extern void _ZN7S3987C23v13Ev();
extern void _ZN7S3987C23v14Ev();
extern void _ZN7S3987C23v15Ev();
extern void _ZN7S3987C23v16Ev();
extern void _ZN7S3987C23v17Ev();
extern void ABISELECT(_ZThn8_N7S3987C2D1Ev,_ZThn4_N7S3987C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3987C2D0Ev,_ZThn4_N7S3987C2D0Ev)();
extern void _ZN7S3987C42v5Ev();
static  VTBL_ENTRY vtc_S3987C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3987C2[0]),
  (VTBL_ENTRY)&_ZN7S3987C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3987C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3987C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3987C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3987C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3987C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v17Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3987C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3987C2D1Ev,_ZThn4_N7S3987C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3987C2D0Ev,_ZThn4_N7S3987C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3987C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3987C2[];
extern  VTBL_ENTRY _ZTV7S3987C2[];
Class_Descriptor cd_S3987C2 = {  "S3987C2", // class name
  bases_S3987C2, 3,
  &(vtc_S3987C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3987C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3987C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3987C6  : S4055C3_nt {
  virtual  ~S3987C6(); // _ZN7S3987C6D1Ev
  virtual void  v18(); // _ZN7S3987C63v18Ev
  S3987C6(); // tgen
};
//SIG(-1 S3987C6) C1{ BC2{ vd m} vd v1}


 S3987C6 ::~S3987C6(){ note_dtor("S3987C6", this);}
void  S3987C6 ::v18(){vfunc_called(this, "_ZN7S3987C63v18Ev");}
S3987C6 ::S3987C6(){ note_ctor("S3987C6", this);} // tgen

static void Test_S3987C6()
{
  extern Class_Descriptor cd_S3987C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3987C6, buf);
    S3987C6 *dp, &lv = *(dp=new (buf) S3987C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3987C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3987C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3987C6");
    test_class_info(&lv, &cd_S3987C6);
    dp->~S3987C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3987C6(Test_S3987C6, "S3987C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3987C6C1Ev();
extern void _ZN7S3987C6D1Ev();
Name_Map name_map_S3987C6[] = {
  NSPAIR(_ZN7S3987C6C1Ev),
  NSPAIR(_ZN7S3987C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3987C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3987C6[];
extern void _ZN7S3987C6D1Ev();
extern void _ZN7S3987C6D0Ev();
extern void _ZN7S3987C63v18Ev();
static  VTBL_ENTRY vtc_S3987C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3987C6[0]),
  (VTBL_ENTRY)&_ZN7S3987C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3987C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3987C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S3987C6[];
extern  VTBL_ENTRY _ZTV7S3987C6[];
Class_Descriptor cd_S3987C6 = {  "S3987C6", // class name
  bases_S3987C6, 1,
  &(vtc_S3987C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3987C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3987C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3987C1  : S3987C2 , S3987C6 {
  void *s3987c1f0[5];
  int s3987c1f1;
  void *s3987c1f2[3];
  int s3987c1f3;
  void *s3987c1f4;
  virtual  ~S3987C1(); // _ZN7S3987C1D1Ev
  virtual void  v1(); // _ZN7S3987C12v1Ev
  virtual void  v2(); // _ZN7S3987C12v2Ev
  virtual void  v3(); // _ZN7S3987C12v3Ev
  virtual void  v4(); // _ZN7S3987C12v4Ev
  S3987C1(); // tgen
};
//SIG(1 S3987C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v5} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v18} vd v1 v2 v3 v4 Fp[5] Fi Fp[3] Fi Fp}


 S3987C1 ::~S3987C1(){ note_dtor("S3987C1", this);}
void  S3987C1 ::v1(){vfunc_called(this, "_ZN7S3987C12v1Ev");}
void  S3987C1 ::v2(){vfunc_called(this, "_ZN7S3987C12v2Ev");}
void  S3987C1 ::v3(){vfunc_called(this, "_ZN7S3987C12v3Ev");}
void  S3987C1 ::v4(){vfunc_called(this, "_ZN7S3987C12v4Ev");}
S3987C1 ::S3987C1(){ note_ctor("S3987C1", this);} // tgen

static void Test_S3987C1()
{
  extern Class_Descriptor cd_S3987C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(28,31)];
    init_test(&cd_S3987C1, buf);
    S3987C1 *dp, &lv = *(dp=new (buf) S3987C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(216,120), "sizeof(S3987C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3987C1)");
    /*is_ambiguous_... S3987C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3987C2*), 0, "S3987C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3987C4*)(S3987C2*), ABISELECT(8,4), "S3987C1");
    check_base_class_offset(lv, (S3987C4*)(S3987C2*), ABISELECT(8,4), "S3987C1");
    check_base_class_offset(lv, (S3987C2*), 0, "S3987C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3987C6*), ABISELECT(120,72), "S3987C1");
    check_base_class_offset(lv, (S3987C6*), ABISELECT(120,72), "S3987C1");
    check_field_offset(lv, s3987c1f0, ABISELECT(128,76), "S3987C1.s3987c1f0");
    check_field_offset(lv, s3987c1f1, ABISELECT(168,96), "S3987C1.s3987c1f1");
    check_field_offset(lv, s3987c1f2, ABISELECT(176,100), "S3987C1.s3987c1f2");
    check_field_offset(lv, s3987c1f3, ABISELECT(200,112), "S3987C1.s3987c1f3");
    check_field_offset(lv, s3987c1f4, ABISELECT(208,116), "S3987C1.s3987c1f4");
    test_class_info(&lv, &cd_S3987C1);
    dp->~S3987C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3987C1(Test_S3987C1, "S3987C1", ABISELECT(216,120));

#else // __cplusplus

extern void _ZN7S3987C1C1Ev();
extern void _ZN7S3987C1D1Ev();
Name_Map name_map_S3987C1[] = {
  NSPAIR(_ZN7S3987C1C1Ev),
  NSPAIR(_ZN7S3987C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3987C4;
extern VTBL_ENTRY _ZTI7S3987C4[];
extern  VTBL_ENTRY _ZTV7S3987C4[];
extern Class_Descriptor cd_S3987C2;
extern VTBL_ENTRY _ZTI7S3987C2[];
extern  VTBL_ENTRY _ZTV7S3987C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3987C6;
extern VTBL_ENTRY _ZTI7S3987C6[];
extern  VTBL_ENTRY _ZTV7S3987C6[];
static Base_Class bases_S3987C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3987C4,    ABISELECT(8,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3987C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3987C6,    ABISELECT(120,72), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3987C1[];
extern void _ZN7S3987C1D1Ev();
extern void _ZN7S3987C1D0Ev();
extern void _ZN7S3987C22v6Ev();
extern void _ZN7S3987C22v7Ev();
extern void _ZN7S3987C22v8Ev();
extern void _ZN7S3987C22v9Ev();
extern void _ZN7S3987C23v10Ev();
extern void _ZN7S3987C23v11Ev();
extern void _ZN7S3987C23v12Ev();
extern void _ZN7S3987C23v13Ev();
extern void _ZN7S3987C23v14Ev();
extern void _ZN7S3987C23v15Ev();
extern void _ZN7S3987C23v16Ev();
extern void _ZN7S3987C23v17Ev();
extern void _ZN7S3987C12v1Ev();
extern void _ZN7S3987C12v2Ev();
extern void _ZN7S3987C12v3Ev();
extern void _ZN7S3987C12v4Ev();
extern void ABISELECT(_ZThn8_N7S3987C1D1Ev,_ZThn4_N7S3987C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3987C1D0Ev,_ZThn4_N7S3987C1D0Ev)();
extern void _ZN7S3987C42v5Ev();
extern void ABISELECT(_ZThn120_N7S3987C1D1Ev,_ZThn72_N7S3987C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3987C1D0Ev,_ZThn72_N7S3987C1D0Ev)();
extern void _ZN7S3987C63v18Ev();
static  VTBL_ENTRY vtc_S3987C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3987C1[0]),
  (VTBL_ENTRY)&_ZN7S3987C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3987C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3987C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3987C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3987C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3987C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3987C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3987C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3987C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3987C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3987C12v4Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3987C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3987C1D1Ev,_ZThn4_N7S3987C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3987C1D0Ev,_ZThn4_N7S3987C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3987C42v5Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3987C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3987C1D1Ev,_ZThn72_N7S3987C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3987C1D0Ev,_ZThn72_N7S3987C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3987C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S3987C1[];
extern  VTBL_ENTRY _ZTV7S3987C1[];
Class_Descriptor cd_S3987C1 = {  "S3987C1", // class name
  bases_S3987C1, 6,
  &(vtc_S3987C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(216,120), // object size
  NSPAIRA(_ZTI7S3987C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3987C1),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3981C4  : S4055C3_nt {
  virtual  ~S3981C4(); // _ZN7S3981C4D1Ev
  virtual void  v5(); // _ZN7S3981C42v5Ev
  S3981C4(); // tgen
};
//SIG(-1 S3981C4) C1{ BC2{ vd m} vd v1}


 S3981C4 ::~S3981C4(){ note_dtor("S3981C4", this);}
void  S3981C4 ::v5(){vfunc_called(this, "_ZN7S3981C42v5Ev");}
S3981C4 ::S3981C4(){ note_ctor("S3981C4", this);} // tgen

static void Test_S3981C4()
{
  extern Class_Descriptor cd_S3981C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3981C4, buf);
    S3981C4 *dp, &lv = *(dp=new (buf) S3981C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3981C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3981C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3981C4");
    test_class_info(&lv, &cd_S3981C4);
    dp->~S3981C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3981C4(Test_S3981C4, "S3981C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3981C4C1Ev();
extern void _ZN7S3981C4D1Ev();
Name_Map name_map_S3981C4[] = {
  NSPAIR(_ZN7S3981C4C1Ev),
  NSPAIR(_ZN7S3981C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3981C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3981C4[];
extern void _ZN7S3981C4D1Ev();
extern void _ZN7S3981C4D0Ev();
extern void _ZN7S3981C42v5Ev();
static  VTBL_ENTRY vtc_S3981C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3981C4[0]),
  (VTBL_ENTRY)&_ZN7S3981C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3981C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3981C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3981C4[];
extern  VTBL_ENTRY _ZTV7S3981C4[];
Class_Descriptor cd_S3981C4 = {  "S3981C4", // class name
  bases_S3981C4, 1,
  &(vtc_S3981C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3981C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3981C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3981C2  : S4055C3_nt , S3981C4 {
  void *s3981c2f0[5];
  int s3981c2f1[2];
  ::S14975C17_nt s3981c2f2;
  void *s3981c2f3;
  int s3981c2f4;
  void *s3981c2f5;
  int s3981c2f6[2];
  void *s3981c2f7;
  int s3981c2f8[2];
  virtual  ~S3981C2(); // _ZN7S3981C2D1Ev
  virtual void  v6(); // _ZN7S3981C22v6Ev
  virtual void  v7(); // _ZN7S3981C22v7Ev
  virtual void  v8(); // _ZN7S3981C22v8Ev
  virtual void  v9(); // _ZN7S3981C22v9Ev
  virtual void  v10(); // _ZN7S3981C23v10Ev
  virtual void  v11(); // _ZN7S3981C23v11Ev
  virtual void  v12(); // _ZN7S3981C23v12Ev
  virtual void  v13(); // _ZN7S3981C23v13Ev
  virtual void  v14(); // _ZN7S3981C23v14Ev
  virtual void  v15(); // _ZN7S3981C23v15Ev
  virtual void  v16(); // _ZN7S3981C23v16Ev
  virtual void  v17(); // _ZN7S3981C23v17Ev
  S3981C2(); // tgen
};
//SIG(-1 S3981C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3981C2 ::~S3981C2(){ note_dtor("S3981C2", this);}
void  S3981C2 ::v6(){vfunc_called(this, "_ZN7S3981C22v6Ev");}
void  S3981C2 ::v7(){vfunc_called(this, "_ZN7S3981C22v7Ev");}
void  S3981C2 ::v8(){vfunc_called(this, "_ZN7S3981C22v8Ev");}
void  S3981C2 ::v9(){vfunc_called(this, "_ZN7S3981C22v9Ev");}
void  S3981C2 ::v10(){vfunc_called(this, "_ZN7S3981C23v10Ev");}
void  S3981C2 ::v11(){vfunc_called(this, "_ZN7S3981C23v11Ev");}
void  S3981C2 ::v12(){vfunc_called(this, "_ZN7S3981C23v12Ev");}
void  S3981C2 ::v13(){vfunc_called(this, "_ZN7S3981C23v13Ev");}
void  S3981C2 ::v14(){vfunc_called(this, "_ZN7S3981C23v14Ev");}
void  S3981C2 ::v15(){vfunc_called(this, "_ZN7S3981C23v15Ev");}
void  S3981C2 ::v16(){vfunc_called(this, "_ZN7S3981C23v16Ev");}
void  S3981C2 ::v17(){vfunc_called(this, "_ZN7S3981C23v17Ev");}
S3981C2 ::S3981C2(){ note_ctor("S3981C2", this);} // tgen

static void Test_S3981C2()
{
  extern Class_Descriptor cd_S3981C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3981C2, buf);
    S3981C2 *dp, &lv = *(dp=new (buf) S3981C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3981C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3981C2)");
    /*is_ambiguous_... S3981C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3981C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3981C4*), ABISELECT(8,4), "S3981C2");
    check_base_class_offset(lv, (S3981C4*), ABISELECT(8,4), "S3981C2");
    check_field_offset(lv, s3981c2f0, ABISELECT(16,8), "S3981C2.s3981c2f0");
    check_field_offset(lv, s3981c2f1, ABISELECT(56,28), "S3981C2.s3981c2f1");
    check_field_offset(lv, s3981c2f2, ABISELECT(64,36), "S3981C2.s3981c2f2");
    check_field_offset(lv, s3981c2f3, ABISELECT(72,40), "S3981C2.s3981c2f3");
    check_field_offset(lv, s3981c2f4, ABISELECT(80,44), "S3981C2.s3981c2f4");
    check_field_offset(lv, s3981c2f5, ABISELECT(88,48), "S3981C2.s3981c2f5");
    check_field_offset(lv, s3981c2f6, ABISELECT(96,52), "S3981C2.s3981c2f6");
    check_field_offset(lv, s3981c2f7, ABISELECT(104,60), "S3981C2.s3981c2f7");
    check_field_offset(lv, s3981c2f8, ABISELECT(112,64), "S3981C2.s3981c2f8");
    test_class_info(&lv, &cd_S3981C2);
    dp->~S3981C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3981C2(Test_S3981C2, "S3981C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3981C2C1Ev();
extern void _ZN7S3981C2D1Ev();
Name_Map name_map_S3981C2[] = {
  NSPAIR(_ZN7S3981C2C1Ev),
  NSPAIR(_ZN7S3981C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3981C4;
extern VTBL_ENTRY _ZTI7S3981C4[];
extern  VTBL_ENTRY _ZTV7S3981C4[];
static Base_Class bases_S3981C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3981C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3981C2[];
extern void _ZN7S3981C2D1Ev();
extern void _ZN7S3981C2D0Ev();
extern void _ZN7S3981C22v6Ev();
extern void _ZN7S3981C22v7Ev();
extern void _ZN7S3981C22v8Ev();
extern void _ZN7S3981C22v9Ev();
extern void _ZN7S3981C23v10Ev();
extern void _ZN7S3981C23v11Ev();
extern void _ZN7S3981C23v12Ev();
extern void _ZN7S3981C23v13Ev();
extern void _ZN7S3981C23v14Ev();
extern void _ZN7S3981C23v15Ev();
extern void _ZN7S3981C23v16Ev();
extern void _ZN7S3981C23v17Ev();
extern void ABISELECT(_ZThn8_N7S3981C2D1Ev,_ZThn4_N7S3981C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3981C2D0Ev,_ZThn4_N7S3981C2D0Ev)();
extern void _ZN7S3981C42v5Ev();
static  VTBL_ENTRY vtc_S3981C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3981C2[0]),
  (VTBL_ENTRY)&_ZN7S3981C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3981C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3981C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3981C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3981C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3981C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v17Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3981C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3981C2D1Ev,_ZThn4_N7S3981C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3981C2D0Ev,_ZThn4_N7S3981C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3981C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3981C2[];
extern  VTBL_ENTRY _ZTV7S3981C2[];
Class_Descriptor cd_S3981C2 = {  "S3981C2", // class name
  bases_S3981C2, 3,
  &(vtc_S3981C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3981C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3981C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3981C6  : S4055C3_nt {
  virtual  ~S3981C6(); // _ZN7S3981C6D1Ev
  virtual void  v18(); // _ZN7S3981C63v18Ev
  S3981C6(); // tgen
};
//SIG(-1 S3981C6) C1{ BC2{ vd m} vd v1}


 S3981C6 ::~S3981C6(){ note_dtor("S3981C6", this);}
void  S3981C6 ::v18(){vfunc_called(this, "_ZN7S3981C63v18Ev");}
S3981C6 ::S3981C6(){ note_ctor("S3981C6", this);} // tgen

static void Test_S3981C6()
{
  extern Class_Descriptor cd_S3981C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3981C6, buf);
    S3981C6 *dp, &lv = *(dp=new (buf) S3981C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3981C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3981C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3981C6");
    test_class_info(&lv, &cd_S3981C6);
    dp->~S3981C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3981C6(Test_S3981C6, "S3981C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3981C6C1Ev();
extern void _ZN7S3981C6D1Ev();
Name_Map name_map_S3981C6[] = {
  NSPAIR(_ZN7S3981C6C1Ev),
  NSPAIR(_ZN7S3981C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3981C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3981C6[];
extern void _ZN7S3981C6D1Ev();
extern void _ZN7S3981C6D0Ev();
extern void _ZN7S3981C63v18Ev();
static  VTBL_ENTRY vtc_S3981C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3981C6[0]),
  (VTBL_ENTRY)&_ZN7S3981C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3981C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3981C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S3981C6[];
extern  VTBL_ENTRY _ZTV7S3981C6[];
Class_Descriptor cd_S3981C6 = {  "S3981C6", // class name
  bases_S3981C6, 1,
  &(vtc_S3981C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3981C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3981C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3981C1  : S3981C2 , S3981C6 {
  void *s3981c1f0[2];
  int s3981c1f1;
  void *s3981c1f2[2];
  int s3981c1f3;
  void *s3981c1f4;
  virtual  ~S3981C1(); // _ZN7S3981C1D1Ev
  virtual void  v1(); // _ZN7S3981C12v1Ev
  virtual void  v2(); // _ZN7S3981C12v2Ev
  virtual void  v3(); // _ZN7S3981C12v3Ev
  virtual void  v4(); // _ZN7S3981C12v4Ev
  S3981C1(); // tgen
};
//SIG(1 S3981C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v5} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v18} vd v1 v2 v3 v4 Fp[2] Fi Fp[2] Fi Fp}


 S3981C1 ::~S3981C1(){ note_dtor("S3981C1", this);}
void  S3981C1 ::v1(){vfunc_called(this, "_ZN7S3981C12v1Ev");}
void  S3981C1 ::v2(){vfunc_called(this, "_ZN7S3981C12v2Ev");}
void  S3981C1 ::v3(){vfunc_called(this, "_ZN7S3981C12v3Ev");}
void  S3981C1 ::v4(){vfunc_called(this, "_ZN7S3981C12v4Ev");}
S3981C1 ::S3981C1(){ note_ctor("S3981C1", this);} // tgen

static void Test_S3981C1()
{
  extern Class_Descriptor cd_S3981C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,27)];
    init_test(&cd_S3981C1, buf);
    S3981C1 *dp, &lv = *(dp=new (buf) S3981C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,104), "sizeof(S3981C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3981C1)");
    /*is_ambiguous_... S3981C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3981C2*), 0, "S3981C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3981C4*)(S3981C2*), ABISELECT(8,4), "S3981C1");
    check_base_class_offset(lv, (S3981C4*)(S3981C2*), ABISELECT(8,4), "S3981C1");
    check_base_class_offset(lv, (S3981C2*), 0, "S3981C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3981C6*), ABISELECT(120,72), "S3981C1");
    check_base_class_offset(lv, (S3981C6*), ABISELECT(120,72), "S3981C1");
    check_field_offset(lv, s3981c1f0, ABISELECT(128,76), "S3981C1.s3981c1f0");
    check_field_offset(lv, s3981c1f1, ABISELECT(144,84), "S3981C1.s3981c1f1");
    check_field_offset(lv, s3981c1f2, ABISELECT(152,88), "S3981C1.s3981c1f2");
    check_field_offset(lv, s3981c1f3, ABISELECT(168,96), "S3981C1.s3981c1f3");
    check_field_offset(lv, s3981c1f4, ABISELECT(176,100), "S3981C1.s3981c1f4");
    test_class_info(&lv, &cd_S3981C1);
    dp->~S3981C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3981C1(Test_S3981C1, "S3981C1", ABISELECT(184,104));

#else // __cplusplus

extern void _ZN7S3981C1C1Ev();
extern void _ZN7S3981C1D1Ev();
Name_Map name_map_S3981C1[] = {
  NSPAIR(_ZN7S3981C1C1Ev),
  NSPAIR(_ZN7S3981C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3981C4;
extern VTBL_ENTRY _ZTI7S3981C4[];
extern  VTBL_ENTRY _ZTV7S3981C4[];
extern Class_Descriptor cd_S3981C2;
extern VTBL_ENTRY _ZTI7S3981C2[];
extern  VTBL_ENTRY _ZTV7S3981C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3981C6;
extern VTBL_ENTRY _ZTI7S3981C6[];
extern  VTBL_ENTRY _ZTV7S3981C6[];
static Base_Class bases_S3981C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3981C4,    ABISELECT(8,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3981C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3981C6,    ABISELECT(120,72), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3981C1[];
extern void _ZN7S3981C1D1Ev();
extern void _ZN7S3981C1D0Ev();
extern void _ZN7S3981C22v6Ev();
extern void _ZN7S3981C22v7Ev();
extern void _ZN7S3981C22v8Ev();
extern void _ZN7S3981C22v9Ev();
extern void _ZN7S3981C23v10Ev();
extern void _ZN7S3981C23v11Ev();
extern void _ZN7S3981C23v12Ev();
extern void _ZN7S3981C23v13Ev();
extern void _ZN7S3981C23v14Ev();
extern void _ZN7S3981C23v15Ev();
extern void _ZN7S3981C23v16Ev();
extern void _ZN7S3981C23v17Ev();
extern void _ZN7S3981C12v1Ev();
extern void _ZN7S3981C12v2Ev();
extern void _ZN7S3981C12v3Ev();
extern void _ZN7S3981C12v4Ev();
extern void ABISELECT(_ZThn8_N7S3981C1D1Ev,_ZThn4_N7S3981C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3981C1D0Ev,_ZThn4_N7S3981C1D0Ev)();
extern void _ZN7S3981C42v5Ev();
extern void ABISELECT(_ZThn120_N7S3981C1D1Ev,_ZThn72_N7S3981C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3981C1D0Ev,_ZThn72_N7S3981C1D0Ev)();
extern void _ZN7S3981C63v18Ev();
static  VTBL_ENTRY vtc_S3981C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3981C1[0]),
  (VTBL_ENTRY)&_ZN7S3981C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3981C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3981C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3981C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3981C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3981C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3981C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3981C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3981C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3981C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3981C12v4Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3981C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3981C1D1Ev,_ZThn4_N7S3981C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3981C1D0Ev,_ZThn4_N7S3981C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3981C42v5Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3981C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3981C1D1Ev,_ZThn72_N7S3981C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3981C1D0Ev,_ZThn72_N7S3981C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3981C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S3981C1[];
extern  VTBL_ENTRY _ZTV7S3981C1[];
Class_Descriptor cd_S3981C1 = {  "S3981C1", // class name
  bases_S3981C1, 6,
  &(vtc_S3981C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,104), // object size
  NSPAIRA(_ZTI7S3981C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3981C1),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4453C3  {
  ::S21714C10_nt s4453c3f0;
  int s4453c3f1[2];
  char s4453c3f2;
  virtual  ~S4453C3(); // _ZN7S4453C3D1Ev
  virtual void  v2(); // _ZN7S4453C32v2Ev
  virtual void  v3(); // _ZN7S4453C32v3Ev
  virtual void  v4(); // _ZN7S4453C32v4Ev
  S4453C3(); // tgen
};
//SIG(-1 S4453C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4453C3 ::~S4453C3(){ note_dtor("S4453C3", this);}
void  S4453C3 ::v2(){vfunc_called(this, "_ZN7S4453C32v2Ev");}
void  S4453C3 ::v3(){vfunc_called(this, "_ZN7S4453C32v3Ev");}
void  S4453C3 ::v4(){vfunc_called(this, "_ZN7S4453C32v4Ev");}
S4453C3 ::S4453C3(){ note_ctor("S4453C3", this);} // tgen

static void Test_S4453C3()
{
  extern Class_Descriptor cd_S4453C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4453C3, buf);
    S4453C3 *dp, &lv = *(dp=new (buf) S4453C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4453C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4453C3)");
    check_field_offset(lv, s4453c3f0, ABISELECT(8,4), "S4453C3.s4453c3f0");
    check_field_offset(lv, s4453c3f1, ABISELECT(24,16), "S4453C3.s4453c3f1");
    check_field_offset(lv, s4453c3f2, ABISELECT(32,24), "S4453C3.s4453c3f2");
    test_class_info(&lv, &cd_S4453C3);
    dp->~S4453C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4453C3(Test_S4453C3, "S4453C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4453C3C1Ev();
extern void _ZN7S4453C3D1Ev();
Name_Map name_map_S4453C3[] = {
  NSPAIR(_ZN7S4453C3C1Ev),
  NSPAIR(_ZN7S4453C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4453C3[];
extern void _ZN7S4453C3D1Ev();
extern void _ZN7S4453C3D0Ev();
extern void _ZN7S4453C32v2Ev();
extern void _ZN7S4453C32v3Ev();
extern void _ZN7S4453C32v4Ev();
static  VTBL_ENTRY vtc_S4453C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4453C3[0]),
  (VTBL_ENTRY)&_ZN7S4453C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4453C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4453C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4453C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4453C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4453C3[];
extern  VTBL_ENTRY _ZTV7S4453C3[];
Class_Descriptor cd_S4453C3 = {  "S4453C3", // class name
  0,0,//no base classes
  &(vtc_S4453C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4453C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4453C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4453C2  : S4453C3 {
  int s4453c2f0;
  ::S9538C4 s4453c2f1;
  virtual  ~S4453C2(); // _ZN7S4453C2D1Ev
  virtual void  v5(); // _ZN7S4453C22v5Ev
  virtual void  v6(); // _ZN7S4453C22v6Ev
  virtual void  v7(); // _ZN7S4453C22v7Ev
  S4453C2(); // tgen
};
//SIG(-1 S4453C2) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 Fi FC5{ m FC6{ m Fp Fi FC7{ m}} Fi FL Fi[2] FL[2] Fc[2] FC6 FC6 FC6 FC6 Fi[3] FC6 FC6 FC6 Fi FC6}}


 S4453C2 ::~S4453C2(){ note_dtor("S4453C2", this);}
void  S4453C2 ::v5(){vfunc_called(this, "_ZN7S4453C22v5Ev");}
void  S4453C2 ::v6(){vfunc_called(this, "_ZN7S4453C22v6Ev");}
void  S4453C2 ::v7(){vfunc_called(this, "_ZN7S4453C22v7Ev");}
S4453C2 ::S4453C2(){ note_ctor("S4453C2", this);} // tgen

static void Test_S4453C2()
{
  extern Class_Descriptor cd_S4453C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S4453C2, buf);
    S4453C2 *dp, &lv = *(dp=new (buf) S4453C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S4453C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4453C2)");
    check_base_class_offset(lv, (S4453C3*), 0, "S4453C2");
    check_field_offset(lv, s4453c2f0, ABISELECT(36,28), "S4453C2.s4453c2f0");
    check_field_offset(lv, s4453c2f1, ABISELECT(40,32), "S4453C2.s4453c2f1");
    test_class_info(&lv, &cd_S4453C2);
    dp->~S4453C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4453C2(Test_S4453C2, "S4453C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S4453C2C1Ev();
extern void _ZN7S4453C2D1Ev();
Name_Map name_map_S4453C2[] = {
  NSPAIR(_ZN7S4453C2C1Ev),
  NSPAIR(_ZN7S4453C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4453C3;
extern VTBL_ENTRY _ZTI7S4453C3[];
extern  VTBL_ENTRY _ZTV7S4453C3[];
static Base_Class bases_S4453C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4453C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4453C2[];
extern void _ZN7S4453C2D1Ev();
extern void _ZN7S4453C2D0Ev();
extern void _ZN7S4453C32v2Ev();
extern void _ZN7S4453C32v3Ev();
extern void _ZN7S4453C32v4Ev();
extern void _ZN7S4453C22v5Ev();
extern void _ZN7S4453C22v6Ev();
extern void _ZN7S4453C22v7Ev();
static  VTBL_ENTRY vtc_S4453C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4453C2[0]),
  (VTBL_ENTRY)&_ZN7S4453C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4453C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4453C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4453C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4453C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4453C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4453C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4453C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4453C2[];
extern  VTBL_ENTRY _ZTV7S4453C2[];
Class_Descriptor cd_S4453C2 = {  "S4453C2", // class name
  bases_S4453C2, 1,
  &(vtc_S4453C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S4453C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4453C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4453C1  : S4453C2 {
  ::S21714C10_nt s4453c1f0;
  int s4453c1f1;
  ::S21714C10_nt s4453c1f2;
  ::S21714C10_nt s4453c1f3;
  int s4453c1f4[4];
  virtual  ~S4453C1(); // _ZN7S4453C1D1Ev
  virtual void  v1(); // _ZN7S4453C12v1Ev
  S4453C1(); // tgen
};
//SIG(1 S4453C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 v6 v7 Fi FC6{ m FC7{ m Fp Fi FC8{ m}} Fi FL Fi[2] FL[2] Fc[2] FC7 FC7 FC7 FC7 Fi[3] FC7 FC7 FC7 Fi FC7}} vd v1 FC4 Fi FC4 FC4 Fi[4]}


 S4453C1 ::~S4453C1(){ note_dtor("S4453C1", this);}
void  S4453C1 ::v1(){vfunc_called(this, "_ZN7S4453C12v1Ev");}
S4453C1 ::S4453C1(){ note_ctor("S4453C1", this);} // tgen

static void Test_S4453C1()
{
  extern Class_Descriptor cd_S4453C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,64)];
    init_test(&cd_S4453C1, buf);
    S4453C1 *dp, &lv = *(dp=new (buf) S4453C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,252), "sizeof(S4453C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4453C1)");
    check_base_class_offset(lv, (S4453C3*)(S4453C2*), 0, "S4453C1");
    check_base_class_offset(lv, (S4453C2*), 0, "S4453C1");
    check_field_offset(lv, s4453c1f0, ABISELECT(256,196), "S4453C1.s4453c1f0");
    check_field_offset(lv, s4453c1f1, ABISELECT(272,208), "S4453C1.s4453c1f1");
    check_field_offset(lv, s4453c1f2, ABISELECT(280,212), "S4453C1.s4453c1f2");
    check_field_offset(lv, s4453c1f3, ABISELECT(296,224), "S4453C1.s4453c1f3");
    check_field_offset(lv, s4453c1f4, ABISELECT(312,236), "S4453C1.s4453c1f4");
    test_class_info(&lv, &cd_S4453C1);
    dp->~S4453C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4453C1(Test_S4453C1, "S4453C1", ABISELECT(328,252));

#else // __cplusplus

extern void _ZN7S4453C1C1Ev();
extern void _ZN7S4453C1D1Ev();
Name_Map name_map_S4453C1[] = {
  NSPAIR(_ZN7S4453C1C1Ev),
  NSPAIR(_ZN7S4453C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4453C3;
extern VTBL_ENTRY _ZTI7S4453C3[];
extern  VTBL_ENTRY _ZTV7S4453C3[];
extern Class_Descriptor cd_S4453C2;
extern VTBL_ENTRY _ZTI7S4453C2[];
extern  VTBL_ENTRY _ZTV7S4453C2[];
static Base_Class bases_S4453C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4453C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4453C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4453C1[];
extern void _ZN7S4453C1D1Ev();
extern void _ZN7S4453C1D0Ev();
extern void _ZN7S4453C32v2Ev();
extern void _ZN7S4453C32v3Ev();
extern void _ZN7S4453C32v4Ev();
extern void _ZN7S4453C22v5Ev();
extern void _ZN7S4453C22v6Ev();
extern void _ZN7S4453C22v7Ev();
extern void _ZN7S4453C12v1Ev();
static  VTBL_ENTRY vtc_S4453C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4453C1[0]),
  (VTBL_ENTRY)&_ZN7S4453C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4453C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4453C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4453C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4453C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4453C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4453C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4453C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4453C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4453C1[];
extern  VTBL_ENTRY _ZTV7S4453C1[];
Class_Descriptor cd_S4453C1 = {  "S4453C1", // class name
  bases_S4453C1, 2,
  &(vtc_S4453C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,252), // object size
  NSPAIRA(_ZTI7S4453C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4453C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3992C4  : S4055C3_nt {
  virtual  ~S3992C4(); // _ZN7S3992C4D1Ev
  virtual void  v6(); // _ZN7S3992C42v6Ev
  S3992C4(); // tgen
};
//SIG(-1 S3992C4) C1{ BC2{ vd m} vd v1}


 S3992C4 ::~S3992C4(){ note_dtor("S3992C4", this);}
void  S3992C4 ::v6(){vfunc_called(this, "_ZN7S3992C42v6Ev");}
S3992C4 ::S3992C4(){ note_ctor("S3992C4", this);} // tgen

static void Test_S3992C4()
{
  extern Class_Descriptor cd_S3992C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3992C4, buf);
    S3992C4 *dp, &lv = *(dp=new (buf) S3992C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3992C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3992C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3992C4");
    test_class_info(&lv, &cd_S3992C4);
    dp->~S3992C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3992C4(Test_S3992C4, "S3992C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3992C4C1Ev();
extern void _ZN7S3992C4D1Ev();
Name_Map name_map_S3992C4[] = {
  NSPAIR(_ZN7S3992C4C1Ev),
  NSPAIR(_ZN7S3992C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3992C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3992C4[];
extern void _ZN7S3992C4D1Ev();
extern void _ZN7S3992C4D0Ev();
extern void _ZN7S3992C42v6Ev();
static  VTBL_ENTRY vtc_S3992C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3992C4[0]),
  (VTBL_ENTRY)&_ZN7S3992C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3992C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3992C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3992C4[];
extern  VTBL_ENTRY _ZTV7S3992C4[];
Class_Descriptor cd_S3992C4 = {  "S3992C4", // class name
  bases_S3992C4, 1,
  &(vtc_S3992C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3992C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3992C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3992C2  : S4055C3_nt , S3992C4 {
  void *s3992c2f0[5];
  int s3992c2f1[2];
  ::S14975C17_nt s3992c2f2;
  void *s3992c2f3;
  int s3992c2f4;
  void *s3992c2f5;
  int s3992c2f6[2];
  void *s3992c2f7;
  int s3992c2f8[2];
  virtual  ~S3992C2(); // _ZN7S3992C2D1Ev
  virtual void  v7(); // _ZN7S3992C22v7Ev
  virtual void  v8(); // _ZN7S3992C22v8Ev
  virtual void  v9(); // _ZN7S3992C22v9Ev
  virtual void  v10(); // _ZN7S3992C23v10Ev
  virtual void  v11(); // _ZN7S3992C23v11Ev
  virtual void  v12(); // _ZN7S3992C23v12Ev
  virtual void  v13(); // _ZN7S3992C23v13Ev
  virtual void  v14(); // _ZN7S3992C23v14Ev
  virtual void  v15(); // _ZN7S3992C23v15Ev
  virtual void  v16(); // _ZN7S3992C23v16Ev
  virtual void  v17(); // _ZN7S3992C23v17Ev
  virtual void  v18(); // _ZN7S3992C23v18Ev
  S3992C2(); // tgen
};
//SIG(-1 S3992C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3992C2 ::~S3992C2(){ note_dtor("S3992C2", this);}
void  S3992C2 ::v7(){vfunc_called(this, "_ZN7S3992C22v7Ev");}
void  S3992C2 ::v8(){vfunc_called(this, "_ZN7S3992C22v8Ev");}
void  S3992C2 ::v9(){vfunc_called(this, "_ZN7S3992C22v9Ev");}
void  S3992C2 ::v10(){vfunc_called(this, "_ZN7S3992C23v10Ev");}
void  S3992C2 ::v11(){vfunc_called(this, "_ZN7S3992C23v11Ev");}
void  S3992C2 ::v12(){vfunc_called(this, "_ZN7S3992C23v12Ev");}
void  S3992C2 ::v13(){vfunc_called(this, "_ZN7S3992C23v13Ev");}
void  S3992C2 ::v14(){vfunc_called(this, "_ZN7S3992C23v14Ev");}
void  S3992C2 ::v15(){vfunc_called(this, "_ZN7S3992C23v15Ev");}
void  S3992C2 ::v16(){vfunc_called(this, "_ZN7S3992C23v16Ev");}
void  S3992C2 ::v17(){vfunc_called(this, "_ZN7S3992C23v17Ev");}
void  S3992C2 ::v18(){vfunc_called(this, "_ZN7S3992C23v18Ev");}
S3992C2 ::S3992C2(){ note_ctor("S3992C2", this);} // tgen

static void Test_S3992C2()
{
  extern Class_Descriptor cd_S3992C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3992C2, buf);
    S3992C2 *dp, &lv = *(dp=new (buf) S3992C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3992C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3992C2)");
    /*is_ambiguous_... S3992C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3992C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3992C4*), ABISELECT(8,4), "S3992C2");
    check_base_class_offset(lv, (S3992C4*), ABISELECT(8,4), "S3992C2");
    check_field_offset(lv, s3992c2f0, ABISELECT(16,8), "S3992C2.s3992c2f0");
    check_field_offset(lv, s3992c2f1, ABISELECT(56,28), "S3992C2.s3992c2f1");
    check_field_offset(lv, s3992c2f2, ABISELECT(64,36), "S3992C2.s3992c2f2");
    check_field_offset(lv, s3992c2f3, ABISELECT(72,40), "S3992C2.s3992c2f3");
    check_field_offset(lv, s3992c2f4, ABISELECT(80,44), "S3992C2.s3992c2f4");
    check_field_offset(lv, s3992c2f5, ABISELECT(88,48), "S3992C2.s3992c2f5");
    check_field_offset(lv, s3992c2f6, ABISELECT(96,52), "S3992C2.s3992c2f6");
    check_field_offset(lv, s3992c2f7, ABISELECT(104,60), "S3992C2.s3992c2f7");
    check_field_offset(lv, s3992c2f8, ABISELECT(112,64), "S3992C2.s3992c2f8");
    test_class_info(&lv, &cd_S3992C2);
    dp->~S3992C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3992C2(Test_S3992C2, "S3992C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3992C2C1Ev();
extern void _ZN7S3992C2D1Ev();
Name_Map name_map_S3992C2[] = {
  NSPAIR(_ZN7S3992C2C1Ev),
  NSPAIR(_ZN7S3992C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3992C4;
extern VTBL_ENTRY _ZTI7S3992C4[];
extern  VTBL_ENTRY _ZTV7S3992C4[];
static Base_Class bases_S3992C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3992C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3992C2[];
extern void _ZN7S3992C2D1Ev();
extern void _ZN7S3992C2D0Ev();
extern void _ZN7S3992C22v7Ev();
extern void _ZN7S3992C22v8Ev();
extern void _ZN7S3992C22v9Ev();
extern void _ZN7S3992C23v10Ev();
extern void _ZN7S3992C23v11Ev();
extern void _ZN7S3992C23v12Ev();
extern void _ZN7S3992C23v13Ev();
extern void _ZN7S3992C23v14Ev();
extern void _ZN7S3992C23v15Ev();
extern void _ZN7S3992C23v16Ev();
extern void _ZN7S3992C23v17Ev();
extern void _ZN7S3992C23v18Ev();
extern void ABISELECT(_ZThn8_N7S3992C2D1Ev,_ZThn4_N7S3992C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3992C2D0Ev,_ZThn4_N7S3992C2D0Ev)();
extern void _ZN7S3992C42v6Ev();
static  VTBL_ENTRY vtc_S3992C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3992C2[0]),
  (VTBL_ENTRY)&_ZN7S3992C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3992C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3992C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3992C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3992C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v18Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3992C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3992C2D1Ev,_ZThn4_N7S3992C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3992C2D0Ev,_ZThn4_N7S3992C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3992C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3992C2[];
extern  VTBL_ENTRY _ZTV7S3992C2[];
Class_Descriptor cd_S3992C2 = {  "S3992C2", // class name
  bases_S3992C2, 3,
  &(vtc_S3992C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3992C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3992C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3992C6  : S4055C3_nt {
  virtual  ~S3992C6(); // _ZN7S3992C6D1Ev
  virtual void  v19(); // _ZN7S3992C63v19Ev
  S3992C6(); // tgen
};
//SIG(-1 S3992C6) C1{ BC2{ vd m} vd v1}


 S3992C6 ::~S3992C6(){ note_dtor("S3992C6", this);}
void  S3992C6 ::v19(){vfunc_called(this, "_ZN7S3992C63v19Ev");}
S3992C6 ::S3992C6(){ note_ctor("S3992C6", this);} // tgen

static void Test_S3992C6()
{
  extern Class_Descriptor cd_S3992C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3992C6, buf);
    S3992C6 *dp, &lv = *(dp=new (buf) S3992C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3992C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3992C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3992C6");
    test_class_info(&lv, &cd_S3992C6);
    dp->~S3992C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3992C6(Test_S3992C6, "S3992C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3992C6C1Ev();
extern void _ZN7S3992C6D1Ev();
Name_Map name_map_S3992C6[] = {
  NSPAIR(_ZN7S3992C6C1Ev),
  NSPAIR(_ZN7S3992C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3992C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3992C6[];
extern void _ZN7S3992C6D1Ev();
extern void _ZN7S3992C6D0Ev();
extern void _ZN7S3992C63v19Ev();
static  VTBL_ENTRY vtc_S3992C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3992C6[0]),
  (VTBL_ENTRY)&_ZN7S3992C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3992C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3992C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3992C6[];
extern  VTBL_ENTRY _ZTV7S3992C6[];
Class_Descriptor cd_S3992C6 = {  "S3992C6", // class name
  bases_S3992C6, 1,
  &(vtc_S3992C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3992C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3992C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3992C1  : S3992C2 , S3992C6 {
  void *s3992c1f0[2];
  int s3992c1f1;
  void *s3992c1f2[5];
  virtual  ~S3992C1(); // _ZN7S3992C1D1Ev
  virtual void  v1(); // _ZN7S3992C12v1Ev
  virtual void  v2(); // _ZN7S3992C12v2Ev
  virtual void  v3(); // _ZN7S3992C12v3Ev
  virtual void  v4(); // _ZN7S3992C12v4Ev
  virtual void  v5(); // _ZN7S3992C12v5Ev
  S3992C1(); // tgen
};
//SIG(1 S3992C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v6} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v19} vd v1 v2 v3 v4 v5 Fp[2] Fi Fp[5]}


 S3992C1 ::~S3992C1(){ note_dtor("S3992C1", this);}
void  S3992C1 ::v1(){vfunc_called(this, "_ZN7S3992C12v1Ev");}
void  S3992C1 ::v2(){vfunc_called(this, "_ZN7S3992C12v2Ev");}
void  S3992C1 ::v3(){vfunc_called(this, "_ZN7S3992C12v3Ev");}
void  S3992C1 ::v4(){vfunc_called(this, "_ZN7S3992C12v4Ev");}
void  S3992C1 ::v5(){vfunc_called(this, "_ZN7S3992C12v5Ev");}
S3992C1 ::S3992C1(){ note_ctor("S3992C1", this);} // tgen

static void Test_S3992C1()
{
  extern Class_Descriptor cd_S3992C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,28)];
    init_test(&cd_S3992C1, buf);
    S3992C1 *dp, &lv = *(dp=new (buf) S3992C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,108), "sizeof(S3992C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3992C1)");
    /*is_ambiguous_... S3992C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3992C2*), 0, "S3992C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3992C4*)(S3992C2*), ABISELECT(8,4), "S3992C1");
    check_base_class_offset(lv, (S3992C4*)(S3992C2*), ABISELECT(8,4), "S3992C1");
    check_base_class_offset(lv, (S3992C2*), 0, "S3992C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3992C6*), ABISELECT(120,72), "S3992C1");
    check_base_class_offset(lv, (S3992C6*), ABISELECT(120,72), "S3992C1");
    check_field_offset(lv, s3992c1f0, ABISELECT(128,76), "S3992C1.s3992c1f0");
    check_field_offset(lv, s3992c1f1, ABISELECT(144,84), "S3992C1.s3992c1f1");
    check_field_offset(lv, s3992c1f2, ABISELECT(152,88), "S3992C1.s3992c1f2");
    test_class_info(&lv, &cd_S3992C1);
    dp->~S3992C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3992C1(Test_S3992C1, "S3992C1", ABISELECT(192,108));

#else // __cplusplus

extern void _ZN7S3992C1C1Ev();
extern void _ZN7S3992C1D1Ev();
Name_Map name_map_S3992C1[] = {
  NSPAIR(_ZN7S3992C1C1Ev),
  NSPAIR(_ZN7S3992C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3992C4;
extern VTBL_ENTRY _ZTI7S3992C4[];
extern  VTBL_ENTRY _ZTV7S3992C4[];
extern Class_Descriptor cd_S3992C2;
extern VTBL_ENTRY _ZTI7S3992C2[];
extern  VTBL_ENTRY _ZTV7S3992C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3992C6;
extern VTBL_ENTRY _ZTI7S3992C6[];
extern  VTBL_ENTRY _ZTV7S3992C6[];
static Base_Class bases_S3992C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3992C4,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3992C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3992C6,    ABISELECT(120,72), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3992C1[];
extern void _ZN7S3992C1D1Ev();
extern void _ZN7S3992C1D0Ev();
extern void _ZN7S3992C22v7Ev();
extern void _ZN7S3992C22v8Ev();
extern void _ZN7S3992C22v9Ev();
extern void _ZN7S3992C23v10Ev();
extern void _ZN7S3992C23v11Ev();
extern void _ZN7S3992C23v12Ev();
extern void _ZN7S3992C23v13Ev();
extern void _ZN7S3992C23v14Ev();
extern void _ZN7S3992C23v15Ev();
extern void _ZN7S3992C23v16Ev();
extern void _ZN7S3992C23v17Ev();
extern void _ZN7S3992C23v18Ev();
extern void _ZN7S3992C12v1Ev();
extern void _ZN7S3992C12v2Ev();
extern void _ZN7S3992C12v3Ev();
extern void _ZN7S3992C12v4Ev();
extern void _ZN7S3992C12v5Ev();
extern void ABISELECT(_ZThn8_N7S3992C1D1Ev,_ZThn4_N7S3992C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3992C1D0Ev,_ZThn4_N7S3992C1D0Ev)();
extern void _ZN7S3992C42v6Ev();
extern void ABISELECT(_ZThn120_N7S3992C1D1Ev,_ZThn72_N7S3992C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3992C1D0Ev,_ZThn72_N7S3992C1D0Ev)();
extern void _ZN7S3992C63v19Ev();
static  VTBL_ENTRY vtc_S3992C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3992C1[0]),
  (VTBL_ENTRY)&_ZN7S3992C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3992C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3992C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3992C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3992C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3992C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3992C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3992C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3992C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3992C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3992C12v5Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3992C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3992C1D1Ev,_ZThn4_N7S3992C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3992C1D0Ev,_ZThn4_N7S3992C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3992C42v6Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3992C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3992C1D1Ev,_ZThn72_N7S3992C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3992C1D0Ev,_ZThn72_N7S3992C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3992C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3992C1[];
extern  VTBL_ENTRY _ZTV7S3992C1[];
Class_Descriptor cd_S3992C1 = {  "S3992C1", // class name
  bases_S3992C1, 6,
  &(vtc_S3992C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,108), // object size
  NSPAIRA(_ZTI7S3992C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3992C1),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3990C4  : S4055C3_nt {
  virtual  ~S3990C4(); // _ZN7S3990C4D1Ev
  virtual void  v6(); // _ZN7S3990C42v6Ev
  S3990C4(); // tgen
};
//SIG(-1 S3990C4) C1{ BC2{ vd m} vd v1}


 S3990C4 ::~S3990C4(){ note_dtor("S3990C4", this);}
void  S3990C4 ::v6(){vfunc_called(this, "_ZN7S3990C42v6Ev");}
S3990C4 ::S3990C4(){ note_ctor("S3990C4", this);} // tgen

static void Test_S3990C4()
{
  extern Class_Descriptor cd_S3990C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3990C4, buf);
    S3990C4 *dp, &lv = *(dp=new (buf) S3990C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3990C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3990C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3990C4");
    test_class_info(&lv, &cd_S3990C4);
    dp->~S3990C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3990C4(Test_S3990C4, "S3990C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3990C4C1Ev();
extern void _ZN7S3990C4D1Ev();
Name_Map name_map_S3990C4[] = {
  NSPAIR(_ZN7S3990C4C1Ev),
  NSPAIR(_ZN7S3990C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3990C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3990C4[];
extern void _ZN7S3990C4D1Ev();
extern void _ZN7S3990C4D0Ev();
extern void _ZN7S3990C42v6Ev();
static  VTBL_ENTRY vtc_S3990C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3990C4[0]),
  (VTBL_ENTRY)&_ZN7S3990C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3990C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3990C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3990C4[];
extern  VTBL_ENTRY _ZTV7S3990C4[];
Class_Descriptor cd_S3990C4 = {  "S3990C4", // class name
  bases_S3990C4, 1,
  &(vtc_S3990C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3990C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3990C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3990C2  : S4055C3_nt , S3990C4 {
  void *s3990c2f0[5];
  int s3990c2f1[2];
  ::S14975C17_nt s3990c2f2;
  void *s3990c2f3;
  int s3990c2f4;
  void *s3990c2f5;
  int s3990c2f6[2];
  void *s3990c2f7;
  int s3990c2f8[2];
  virtual  ~S3990C2(); // _ZN7S3990C2D1Ev
  virtual void  v7(); // _ZN7S3990C22v7Ev
  virtual void  v8(); // _ZN7S3990C22v8Ev
  virtual void  v9(); // _ZN7S3990C22v9Ev
  virtual void  v10(); // _ZN7S3990C23v10Ev
  virtual void  v11(); // _ZN7S3990C23v11Ev
  virtual void  v12(); // _ZN7S3990C23v12Ev
  virtual void  v13(); // _ZN7S3990C23v13Ev
  virtual void  v14(); // _ZN7S3990C23v14Ev
  virtual void  v15(); // _ZN7S3990C23v15Ev
  virtual void  v16(); // _ZN7S3990C23v16Ev
  virtual void  v17(); // _ZN7S3990C23v17Ev
  virtual void  v18(); // _ZN7S3990C23v18Ev
  S3990C2(); // tgen
};
//SIG(-1 S3990C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3990C2 ::~S3990C2(){ note_dtor("S3990C2", this);}
void  S3990C2 ::v7(){vfunc_called(this, "_ZN7S3990C22v7Ev");}
void  S3990C2 ::v8(){vfunc_called(this, "_ZN7S3990C22v8Ev");}
void  S3990C2 ::v9(){vfunc_called(this, "_ZN7S3990C22v9Ev");}
void  S3990C2 ::v10(){vfunc_called(this, "_ZN7S3990C23v10Ev");}
void  S3990C2 ::v11(){vfunc_called(this, "_ZN7S3990C23v11Ev");}
void  S3990C2 ::v12(){vfunc_called(this, "_ZN7S3990C23v12Ev");}
void  S3990C2 ::v13(){vfunc_called(this, "_ZN7S3990C23v13Ev");}
void  S3990C2 ::v14(){vfunc_called(this, "_ZN7S3990C23v14Ev");}
void  S3990C2 ::v15(){vfunc_called(this, "_ZN7S3990C23v15Ev");}
void  S3990C2 ::v16(){vfunc_called(this, "_ZN7S3990C23v16Ev");}
void  S3990C2 ::v17(){vfunc_called(this, "_ZN7S3990C23v17Ev");}
void  S3990C2 ::v18(){vfunc_called(this, "_ZN7S3990C23v18Ev");}
S3990C2 ::S3990C2(){ note_ctor("S3990C2", this);} // tgen

static void Test_S3990C2()
{
  extern Class_Descriptor cd_S3990C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3990C2, buf);
    S3990C2 *dp, &lv = *(dp=new (buf) S3990C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3990C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3990C2)");
    /*is_ambiguous_... S3990C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3990C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3990C4*), ABISELECT(8,4), "S3990C2");
    check_base_class_offset(lv, (S3990C4*), ABISELECT(8,4), "S3990C2");
    check_field_offset(lv, s3990c2f0, ABISELECT(16,8), "S3990C2.s3990c2f0");
    check_field_offset(lv, s3990c2f1, ABISELECT(56,28), "S3990C2.s3990c2f1");
    check_field_offset(lv, s3990c2f2, ABISELECT(64,36), "S3990C2.s3990c2f2");
    check_field_offset(lv, s3990c2f3, ABISELECT(72,40), "S3990C2.s3990c2f3");
    check_field_offset(lv, s3990c2f4, ABISELECT(80,44), "S3990C2.s3990c2f4");
    check_field_offset(lv, s3990c2f5, ABISELECT(88,48), "S3990C2.s3990c2f5");
    check_field_offset(lv, s3990c2f6, ABISELECT(96,52), "S3990C2.s3990c2f6");
    check_field_offset(lv, s3990c2f7, ABISELECT(104,60), "S3990C2.s3990c2f7");
    check_field_offset(lv, s3990c2f8, ABISELECT(112,64), "S3990C2.s3990c2f8");
    test_class_info(&lv, &cd_S3990C2);
    dp->~S3990C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3990C2(Test_S3990C2, "S3990C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3990C2C1Ev();
extern void _ZN7S3990C2D1Ev();
Name_Map name_map_S3990C2[] = {
  NSPAIR(_ZN7S3990C2C1Ev),
  NSPAIR(_ZN7S3990C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3990C4;
extern VTBL_ENTRY _ZTI7S3990C4[];
extern  VTBL_ENTRY _ZTV7S3990C4[];
static Base_Class bases_S3990C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3990C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3990C2[];
extern void _ZN7S3990C2D1Ev();
extern void _ZN7S3990C2D0Ev();
extern void _ZN7S3990C22v7Ev();
extern void _ZN7S3990C22v8Ev();
extern void _ZN7S3990C22v9Ev();
extern void _ZN7S3990C23v10Ev();
extern void _ZN7S3990C23v11Ev();
extern void _ZN7S3990C23v12Ev();
extern void _ZN7S3990C23v13Ev();
extern void _ZN7S3990C23v14Ev();
extern void _ZN7S3990C23v15Ev();
extern void _ZN7S3990C23v16Ev();
extern void _ZN7S3990C23v17Ev();
extern void _ZN7S3990C23v18Ev();
extern void ABISELECT(_ZThn8_N7S3990C2D1Ev,_ZThn4_N7S3990C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3990C2D0Ev,_ZThn4_N7S3990C2D0Ev)();
extern void _ZN7S3990C42v6Ev();
static  VTBL_ENTRY vtc_S3990C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3990C2[0]),
  (VTBL_ENTRY)&_ZN7S3990C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3990C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3990C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3990C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3990C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v18Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3990C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3990C2D1Ev,_ZThn4_N7S3990C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3990C2D0Ev,_ZThn4_N7S3990C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3990C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3990C2[];
extern  VTBL_ENTRY _ZTV7S3990C2[];
Class_Descriptor cd_S3990C2 = {  "S3990C2", // class name
  bases_S3990C2, 3,
  &(vtc_S3990C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3990C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3990C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3990C6  : S4055C3_nt {
  virtual  ~S3990C6(); // _ZN7S3990C6D1Ev
  virtual void  v19(); // _ZN7S3990C63v19Ev
  S3990C6(); // tgen
};
//SIG(-1 S3990C6) C1{ BC2{ vd m} vd v1}


 S3990C6 ::~S3990C6(){ note_dtor("S3990C6", this);}
void  S3990C6 ::v19(){vfunc_called(this, "_ZN7S3990C63v19Ev");}
S3990C6 ::S3990C6(){ note_ctor("S3990C6", this);} // tgen

static void Test_S3990C6()
{
  extern Class_Descriptor cd_S3990C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3990C6, buf);
    S3990C6 *dp, &lv = *(dp=new (buf) S3990C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3990C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3990C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3990C6");
    test_class_info(&lv, &cd_S3990C6);
    dp->~S3990C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3990C6(Test_S3990C6, "S3990C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3990C6C1Ev();
extern void _ZN7S3990C6D1Ev();
Name_Map name_map_S3990C6[] = {
  NSPAIR(_ZN7S3990C6C1Ev),
  NSPAIR(_ZN7S3990C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3990C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3990C6[];
extern void _ZN7S3990C6D1Ev();
extern void _ZN7S3990C6D0Ev();
extern void _ZN7S3990C63v19Ev();
static  VTBL_ENTRY vtc_S3990C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3990C6[0]),
  (VTBL_ENTRY)&_ZN7S3990C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3990C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3990C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3990C6[];
extern  VTBL_ENTRY _ZTV7S3990C6[];
Class_Descriptor cd_S3990C6 = {  "S3990C6", // class name
  bases_S3990C6, 1,
  &(vtc_S3990C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3990C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3990C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3990C1  : S3990C2 , S3990C6 {
  void *s3990c1f0[2];
  int s3990c1f1;
  void *s3990c1f2[2];
  virtual  ~S3990C1(); // _ZN7S3990C1D1Ev
  virtual void  v1(); // _ZN7S3990C12v1Ev
  virtual void  v2(); // _ZN7S3990C12v2Ev
  virtual void  v3(); // _ZN7S3990C12v3Ev
  virtual void  v4(); // _ZN7S3990C12v4Ev
  virtual void  v5(); // _ZN7S3990C12v5Ev
  S3990C1(); // tgen
};
//SIG(1 S3990C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v6} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v19} vd v1 v2 v3 v4 v5 Fp[2] Fi Fp[2]}


 S3990C1 ::~S3990C1(){ note_dtor("S3990C1", this);}
void  S3990C1 ::v1(){vfunc_called(this, "_ZN7S3990C12v1Ev");}
void  S3990C1 ::v2(){vfunc_called(this, "_ZN7S3990C12v2Ev");}
void  S3990C1 ::v3(){vfunc_called(this, "_ZN7S3990C12v3Ev");}
void  S3990C1 ::v4(){vfunc_called(this, "_ZN7S3990C12v4Ev");}
void  S3990C1 ::v5(){vfunc_called(this, "_ZN7S3990C12v5Ev");}
S3990C1 ::S3990C1(){ note_ctor("S3990C1", this);} // tgen

static void Test_S3990C1()
{
  extern Class_Descriptor cd_S3990C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,25)];
    init_test(&cd_S3990C1, buf);
    S3990C1 *dp, &lv = *(dp=new (buf) S3990C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,96), "sizeof(S3990C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3990C1)");
    /*is_ambiguous_... S3990C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3990C2*), 0, "S3990C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3990C4*)(S3990C2*), ABISELECT(8,4), "S3990C1");
    check_base_class_offset(lv, (S3990C4*)(S3990C2*), ABISELECT(8,4), "S3990C1");
    check_base_class_offset(lv, (S3990C2*), 0, "S3990C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3990C6*), ABISELECT(120,72), "S3990C1");
    check_base_class_offset(lv, (S3990C6*), ABISELECT(120,72), "S3990C1");
    check_field_offset(lv, s3990c1f0, ABISELECT(128,76), "S3990C1.s3990c1f0");
    check_field_offset(lv, s3990c1f1, ABISELECT(144,84), "S3990C1.s3990c1f1");
    check_field_offset(lv, s3990c1f2, ABISELECT(152,88), "S3990C1.s3990c1f2");
    test_class_info(&lv, &cd_S3990C1);
    dp->~S3990C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3990C1(Test_S3990C1, "S3990C1", ABISELECT(168,96));

#else // __cplusplus

extern void _ZN7S3990C1C1Ev();
extern void _ZN7S3990C1D1Ev();
Name_Map name_map_S3990C1[] = {
  NSPAIR(_ZN7S3990C1C1Ev),
  NSPAIR(_ZN7S3990C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3990C4;
extern VTBL_ENTRY _ZTI7S3990C4[];
extern  VTBL_ENTRY _ZTV7S3990C4[];
extern Class_Descriptor cd_S3990C2;
extern VTBL_ENTRY _ZTI7S3990C2[];
extern  VTBL_ENTRY _ZTV7S3990C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3990C6;
extern VTBL_ENTRY _ZTI7S3990C6[];
extern  VTBL_ENTRY _ZTV7S3990C6[];
static Base_Class bases_S3990C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3990C4,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3990C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3990C6,    ABISELECT(120,72), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3990C1[];
extern void _ZN7S3990C1D1Ev();
extern void _ZN7S3990C1D0Ev();
extern void _ZN7S3990C22v7Ev();
extern void _ZN7S3990C22v8Ev();
extern void _ZN7S3990C22v9Ev();
extern void _ZN7S3990C23v10Ev();
extern void _ZN7S3990C23v11Ev();
extern void _ZN7S3990C23v12Ev();
extern void _ZN7S3990C23v13Ev();
extern void _ZN7S3990C23v14Ev();
extern void _ZN7S3990C23v15Ev();
extern void _ZN7S3990C23v16Ev();
extern void _ZN7S3990C23v17Ev();
extern void _ZN7S3990C23v18Ev();
extern void _ZN7S3990C12v1Ev();
extern void _ZN7S3990C12v2Ev();
extern void _ZN7S3990C12v3Ev();
extern void _ZN7S3990C12v4Ev();
extern void _ZN7S3990C12v5Ev();
extern void ABISELECT(_ZThn8_N7S3990C1D1Ev,_ZThn4_N7S3990C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3990C1D0Ev,_ZThn4_N7S3990C1D0Ev)();
extern void _ZN7S3990C42v6Ev();
extern void ABISELECT(_ZThn120_N7S3990C1D1Ev,_ZThn72_N7S3990C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3990C1D0Ev,_ZThn72_N7S3990C1D0Ev)();
extern void _ZN7S3990C63v19Ev();
static  VTBL_ENTRY vtc_S3990C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3990C1[0]),
  (VTBL_ENTRY)&_ZN7S3990C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3990C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3990C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3990C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3990C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3990C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3990C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3990C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3990C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3990C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3990C12v5Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3990C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3990C1D1Ev,_ZThn4_N7S3990C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3990C1D0Ev,_ZThn4_N7S3990C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3990C42v6Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3990C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3990C1D1Ev,_ZThn72_N7S3990C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3990C1D0Ev,_ZThn72_N7S3990C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3990C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3990C1[];
extern  VTBL_ENTRY _ZTV7S3990C1[];
Class_Descriptor cd_S3990C1 = {  "S3990C1", // class name
  bases_S3990C1, 6,
  &(vtc_S3990C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,96), // object size
  NSPAIRA(_ZTI7S3990C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3990C1),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3983C4  : S4055C3_nt {
  virtual  ~S3983C4(); // _ZN7S3983C4D1Ev
  virtual void  v5(); // _ZN7S3983C42v5Ev
  S3983C4(); // tgen
};
//SIG(-1 S3983C4) C1{ BC2{ vd m} vd v1}


 S3983C4 ::~S3983C4(){ note_dtor("S3983C4", this);}
void  S3983C4 ::v5(){vfunc_called(this, "_ZN7S3983C42v5Ev");}
S3983C4 ::S3983C4(){ note_ctor("S3983C4", this);} // tgen

static void Test_S3983C4()
{
  extern Class_Descriptor cd_S3983C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3983C4, buf);
    S3983C4 *dp, &lv = *(dp=new (buf) S3983C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3983C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3983C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3983C4");
    test_class_info(&lv, &cd_S3983C4);
    dp->~S3983C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3983C4(Test_S3983C4, "S3983C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3983C4C1Ev();
extern void _ZN7S3983C4D1Ev();
Name_Map name_map_S3983C4[] = {
  NSPAIR(_ZN7S3983C4C1Ev),
  NSPAIR(_ZN7S3983C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3983C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3983C4[];
extern void _ZN7S3983C4D1Ev();
extern void _ZN7S3983C4D0Ev();
extern void _ZN7S3983C42v5Ev();
static  VTBL_ENTRY vtc_S3983C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3983C4[0]),
  (VTBL_ENTRY)&_ZN7S3983C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3983C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3983C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3983C4[];
extern  VTBL_ENTRY _ZTV7S3983C4[];
Class_Descriptor cd_S3983C4 = {  "S3983C4", // class name
  bases_S3983C4, 1,
  &(vtc_S3983C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3983C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3983C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3983C2  : S4055C3_nt , S3983C4 {
  void *s3983c2f0[5];
  int s3983c2f1[2];
  ::S14975C17_nt s3983c2f2;
  void *s3983c2f3;
  int s3983c2f4;
  void *s3983c2f5;
  int s3983c2f6[2];
  void *s3983c2f7;
  int s3983c2f8[2];
  virtual  ~S3983C2(); // _ZN7S3983C2D1Ev
  virtual void  v6(); // _ZN7S3983C22v6Ev
  virtual void  v7(); // _ZN7S3983C22v7Ev
  virtual void  v8(); // _ZN7S3983C22v8Ev
  virtual void  v9(); // _ZN7S3983C22v9Ev
  virtual void  v10(); // _ZN7S3983C23v10Ev
  virtual void  v11(); // _ZN7S3983C23v11Ev
  virtual void  v12(); // _ZN7S3983C23v12Ev
  virtual void  v13(); // _ZN7S3983C23v13Ev
  virtual void  v14(); // _ZN7S3983C23v14Ev
  virtual void  v15(); // _ZN7S3983C23v15Ev
  virtual void  v16(); // _ZN7S3983C23v16Ev
  virtual void  v17(); // _ZN7S3983C23v17Ev
  S3983C2(); // tgen
};
//SIG(-1 S3983C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3983C2 ::~S3983C2(){ note_dtor("S3983C2", this);}
void  S3983C2 ::v6(){vfunc_called(this, "_ZN7S3983C22v6Ev");}
void  S3983C2 ::v7(){vfunc_called(this, "_ZN7S3983C22v7Ev");}
void  S3983C2 ::v8(){vfunc_called(this, "_ZN7S3983C22v8Ev");}
void  S3983C2 ::v9(){vfunc_called(this, "_ZN7S3983C22v9Ev");}
void  S3983C2 ::v10(){vfunc_called(this, "_ZN7S3983C23v10Ev");}
void  S3983C2 ::v11(){vfunc_called(this, "_ZN7S3983C23v11Ev");}
void  S3983C2 ::v12(){vfunc_called(this, "_ZN7S3983C23v12Ev");}
void  S3983C2 ::v13(){vfunc_called(this, "_ZN7S3983C23v13Ev");}
void  S3983C2 ::v14(){vfunc_called(this, "_ZN7S3983C23v14Ev");}
void  S3983C2 ::v15(){vfunc_called(this, "_ZN7S3983C23v15Ev");}
void  S3983C2 ::v16(){vfunc_called(this, "_ZN7S3983C23v16Ev");}
void  S3983C2 ::v17(){vfunc_called(this, "_ZN7S3983C23v17Ev");}
S3983C2 ::S3983C2(){ note_ctor("S3983C2", this);} // tgen

static void Test_S3983C2()
{
  extern Class_Descriptor cd_S3983C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3983C2, buf);
    S3983C2 *dp, &lv = *(dp=new (buf) S3983C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3983C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3983C2)");
    /*is_ambiguous_... S3983C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3983C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3983C4*), ABISELECT(8,4), "S3983C2");
    check_base_class_offset(lv, (S3983C4*), ABISELECT(8,4), "S3983C2");
    check_field_offset(lv, s3983c2f0, ABISELECT(16,8), "S3983C2.s3983c2f0");
    check_field_offset(lv, s3983c2f1, ABISELECT(56,28), "S3983C2.s3983c2f1");
    check_field_offset(lv, s3983c2f2, ABISELECT(64,36), "S3983C2.s3983c2f2");
    check_field_offset(lv, s3983c2f3, ABISELECT(72,40), "S3983C2.s3983c2f3");
    check_field_offset(lv, s3983c2f4, ABISELECT(80,44), "S3983C2.s3983c2f4");
    check_field_offset(lv, s3983c2f5, ABISELECT(88,48), "S3983C2.s3983c2f5");
    check_field_offset(lv, s3983c2f6, ABISELECT(96,52), "S3983C2.s3983c2f6");
    check_field_offset(lv, s3983c2f7, ABISELECT(104,60), "S3983C2.s3983c2f7");
    check_field_offset(lv, s3983c2f8, ABISELECT(112,64), "S3983C2.s3983c2f8");
    test_class_info(&lv, &cd_S3983C2);
    dp->~S3983C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3983C2(Test_S3983C2, "S3983C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3983C2C1Ev();
extern void _ZN7S3983C2D1Ev();
Name_Map name_map_S3983C2[] = {
  NSPAIR(_ZN7S3983C2C1Ev),
  NSPAIR(_ZN7S3983C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3983C4;
extern VTBL_ENTRY _ZTI7S3983C4[];
extern  VTBL_ENTRY _ZTV7S3983C4[];
static Base_Class bases_S3983C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3983C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3983C2[];
extern void _ZN7S3983C2D1Ev();
extern void _ZN7S3983C2D0Ev();
extern void _ZN7S3983C22v6Ev();
extern void _ZN7S3983C22v7Ev();
extern void _ZN7S3983C22v8Ev();
extern void _ZN7S3983C22v9Ev();
extern void _ZN7S3983C23v10Ev();
extern void _ZN7S3983C23v11Ev();
extern void _ZN7S3983C23v12Ev();
extern void _ZN7S3983C23v13Ev();
extern void _ZN7S3983C23v14Ev();
extern void _ZN7S3983C23v15Ev();
extern void _ZN7S3983C23v16Ev();
extern void _ZN7S3983C23v17Ev();
extern void ABISELECT(_ZThn8_N7S3983C2D1Ev,_ZThn4_N7S3983C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3983C2D0Ev,_ZThn4_N7S3983C2D0Ev)();
extern void _ZN7S3983C42v5Ev();
static  VTBL_ENTRY vtc_S3983C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3983C2[0]),
  (VTBL_ENTRY)&_ZN7S3983C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3983C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3983C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3983C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3983C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3983C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v17Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3983C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3983C2D1Ev,_ZThn4_N7S3983C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3983C2D0Ev,_ZThn4_N7S3983C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3983C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3983C2[];
extern  VTBL_ENTRY _ZTV7S3983C2[];
Class_Descriptor cd_S3983C2 = {  "S3983C2", // class name
  bases_S3983C2, 3,
  &(vtc_S3983C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3983C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3983C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3983C6  : S4055C3_nt {
  virtual  ~S3983C6(); // _ZN7S3983C6D1Ev
  virtual void  v18(); // _ZN7S3983C63v18Ev
  S3983C6(); // tgen
};
//SIG(-1 S3983C6) C1{ BC2{ vd m} vd v1}


 S3983C6 ::~S3983C6(){ note_dtor("S3983C6", this);}
void  S3983C6 ::v18(){vfunc_called(this, "_ZN7S3983C63v18Ev");}
S3983C6 ::S3983C6(){ note_ctor("S3983C6", this);} // tgen

static void Test_S3983C6()
{
  extern Class_Descriptor cd_S3983C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3983C6, buf);
    S3983C6 *dp, &lv = *(dp=new (buf) S3983C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3983C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3983C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3983C6");
    test_class_info(&lv, &cd_S3983C6);
    dp->~S3983C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3983C6(Test_S3983C6, "S3983C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3983C6C1Ev();
extern void _ZN7S3983C6D1Ev();
Name_Map name_map_S3983C6[] = {
  NSPAIR(_ZN7S3983C6C1Ev),
  NSPAIR(_ZN7S3983C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3983C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3983C6[];
extern void _ZN7S3983C6D1Ev();
extern void _ZN7S3983C6D0Ev();
extern void _ZN7S3983C63v18Ev();
static  VTBL_ENTRY vtc_S3983C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3983C6[0]),
  (VTBL_ENTRY)&_ZN7S3983C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3983C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3983C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S3983C6[];
extern  VTBL_ENTRY _ZTV7S3983C6[];
Class_Descriptor cd_S3983C6 = {  "S3983C6", // class name
  bases_S3983C6, 1,
  &(vtc_S3983C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3983C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3983C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3983C1  : S3983C2 , S3983C6 {
  void *s3983c1f0[2];
  int s3983c1f1;
  void *s3983c1f2[3];
  virtual  ~S3983C1(); // _ZN7S3983C1D1Ev
  virtual void  v1(); // _ZN7S3983C12v1Ev
  virtual void  v2(); // _ZN7S3983C12v2Ev
  virtual void  v3(); // _ZN7S3983C12v3Ev
  virtual void  v4(); // _ZN7S3983C12v4Ev
  S3983C1(); // tgen
};
//SIG(1 S3983C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v5} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v18} vd v1 v2 v3 v4 Fp[2] Fi Fp[3]}


 S3983C1 ::~S3983C1(){ note_dtor("S3983C1", this);}
void  S3983C1 ::v1(){vfunc_called(this, "_ZN7S3983C12v1Ev");}
void  S3983C1 ::v2(){vfunc_called(this, "_ZN7S3983C12v2Ev");}
void  S3983C1 ::v3(){vfunc_called(this, "_ZN7S3983C12v3Ev");}
void  S3983C1 ::v4(){vfunc_called(this, "_ZN7S3983C12v4Ev");}
S3983C1 ::S3983C1(){ note_ctor("S3983C1", this);} // tgen

static void Test_S3983C1()
{
  extern Class_Descriptor cd_S3983C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,26)];
    init_test(&cd_S3983C1, buf);
    S3983C1 *dp, &lv = *(dp=new (buf) S3983C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,100), "sizeof(S3983C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3983C1)");
    /*is_ambiguous_... S3983C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3983C2*), 0, "S3983C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3983C4*)(S3983C2*), ABISELECT(8,4), "S3983C1");
    check_base_class_offset(lv, (S3983C4*)(S3983C2*), ABISELECT(8,4), "S3983C1");
    check_base_class_offset(lv, (S3983C2*), 0, "S3983C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3983C6*), ABISELECT(120,72), "S3983C1");
    check_base_class_offset(lv, (S3983C6*), ABISELECT(120,72), "S3983C1");
    check_field_offset(lv, s3983c1f0, ABISELECT(128,76), "S3983C1.s3983c1f0");
    check_field_offset(lv, s3983c1f1, ABISELECT(144,84), "S3983C1.s3983c1f1");
    check_field_offset(lv, s3983c1f2, ABISELECT(152,88), "S3983C1.s3983c1f2");
    test_class_info(&lv, &cd_S3983C1);
    dp->~S3983C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3983C1(Test_S3983C1, "S3983C1", ABISELECT(176,100));

#else // __cplusplus

extern void _ZN7S3983C1C1Ev();
extern void _ZN7S3983C1D1Ev();
Name_Map name_map_S3983C1[] = {
  NSPAIR(_ZN7S3983C1C1Ev),
  NSPAIR(_ZN7S3983C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3983C4;
extern VTBL_ENTRY _ZTI7S3983C4[];
extern  VTBL_ENTRY _ZTV7S3983C4[];
extern Class_Descriptor cd_S3983C2;
extern VTBL_ENTRY _ZTI7S3983C2[];
extern  VTBL_ENTRY _ZTV7S3983C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3983C6;
extern VTBL_ENTRY _ZTI7S3983C6[];
extern  VTBL_ENTRY _ZTV7S3983C6[];
static Base_Class bases_S3983C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3983C4,    ABISELECT(8,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3983C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3983C6,    ABISELECT(120,72), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3983C1[];
extern void _ZN7S3983C1D1Ev();
extern void _ZN7S3983C1D0Ev();
extern void _ZN7S3983C22v6Ev();
extern void _ZN7S3983C22v7Ev();
extern void _ZN7S3983C22v8Ev();
extern void _ZN7S3983C22v9Ev();
extern void _ZN7S3983C23v10Ev();
extern void _ZN7S3983C23v11Ev();
extern void _ZN7S3983C23v12Ev();
extern void _ZN7S3983C23v13Ev();
extern void _ZN7S3983C23v14Ev();
extern void _ZN7S3983C23v15Ev();
extern void _ZN7S3983C23v16Ev();
extern void _ZN7S3983C23v17Ev();
extern void _ZN7S3983C12v1Ev();
extern void _ZN7S3983C12v2Ev();
extern void _ZN7S3983C12v3Ev();
extern void _ZN7S3983C12v4Ev();
extern void ABISELECT(_ZThn8_N7S3983C1D1Ev,_ZThn4_N7S3983C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3983C1D0Ev,_ZThn4_N7S3983C1D0Ev)();
extern void _ZN7S3983C42v5Ev();
extern void ABISELECT(_ZThn120_N7S3983C1D1Ev,_ZThn72_N7S3983C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3983C1D0Ev,_ZThn72_N7S3983C1D0Ev)();
extern void _ZN7S3983C63v18Ev();
static  VTBL_ENTRY vtc_S3983C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3983C1[0]),
  (VTBL_ENTRY)&_ZN7S3983C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3983C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3983C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3983C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3983C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3983C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3983C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3983C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3983C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3983C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3983C12v4Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3983C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3983C1D1Ev,_ZThn4_N7S3983C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3983C1D0Ev,_ZThn4_N7S3983C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3983C42v5Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3983C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3983C1D1Ev,_ZThn72_N7S3983C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3983C1D0Ev,_ZThn72_N7S3983C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3983C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S3983C1[];
extern  VTBL_ENTRY _ZTV7S3983C1[];
Class_Descriptor cd_S3983C1 = {  "S3983C1", // class name
  bases_S3983C1, 6,
  &(vtc_S3983C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,100), // object size
  NSPAIRA(_ZTI7S3983C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3983C1),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3982C4  : S4055C3_nt {
  virtual  ~S3982C4(); // _ZN7S3982C4D1Ev
  virtual void  v5(); // _ZN7S3982C42v5Ev
  S3982C4(); // tgen
};
//SIG(-1 S3982C4) C1{ BC2{ vd m} vd v1}


 S3982C4 ::~S3982C4(){ note_dtor("S3982C4", this);}
void  S3982C4 ::v5(){vfunc_called(this, "_ZN7S3982C42v5Ev");}
S3982C4 ::S3982C4(){ note_ctor("S3982C4", this);} // tgen

static void Test_S3982C4()
{
  extern Class_Descriptor cd_S3982C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3982C4, buf);
    S3982C4 *dp, &lv = *(dp=new (buf) S3982C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3982C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3982C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3982C4");
    test_class_info(&lv, &cd_S3982C4);
    dp->~S3982C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3982C4(Test_S3982C4, "S3982C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3982C4C1Ev();
extern void _ZN7S3982C4D1Ev();
Name_Map name_map_S3982C4[] = {
  NSPAIR(_ZN7S3982C4C1Ev),
  NSPAIR(_ZN7S3982C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3982C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3982C4[];
extern void _ZN7S3982C4D1Ev();
extern void _ZN7S3982C4D0Ev();
extern void _ZN7S3982C42v5Ev();
static  VTBL_ENTRY vtc_S3982C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3982C4[0]),
  (VTBL_ENTRY)&_ZN7S3982C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3982C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3982C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3982C4[];
extern  VTBL_ENTRY _ZTV7S3982C4[];
Class_Descriptor cd_S3982C4 = {  "S3982C4", // class name
  bases_S3982C4, 1,
  &(vtc_S3982C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3982C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3982C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3982C2  : S4055C3_nt , S3982C4 {
  void *s3982c2f0[5];
  int s3982c2f1[2];
  ::S14975C17_nt s3982c2f2;
  void *s3982c2f3;
  int s3982c2f4;
  void *s3982c2f5;
  int s3982c2f6[2];
  void *s3982c2f7;
  int s3982c2f8[2];
  virtual  ~S3982C2(); // _ZN7S3982C2D1Ev
  virtual void  v6(); // _ZN7S3982C22v6Ev
  virtual void  v7(); // _ZN7S3982C22v7Ev
  virtual void  v8(); // _ZN7S3982C22v8Ev
  virtual void  v9(); // _ZN7S3982C22v9Ev
  virtual void  v10(); // _ZN7S3982C23v10Ev
  virtual void  v11(); // _ZN7S3982C23v11Ev
  virtual void  v12(); // _ZN7S3982C23v12Ev
  virtual void  v13(); // _ZN7S3982C23v13Ev
  virtual void  v14(); // _ZN7S3982C23v14Ev
  virtual void  v15(); // _ZN7S3982C23v15Ev
  virtual void  v16(); // _ZN7S3982C23v16Ev
  virtual void  v17(); // _ZN7S3982C23v17Ev
  S3982C2(); // tgen
};
//SIG(-1 S3982C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3982C2 ::~S3982C2(){ note_dtor("S3982C2", this);}
void  S3982C2 ::v6(){vfunc_called(this, "_ZN7S3982C22v6Ev");}
void  S3982C2 ::v7(){vfunc_called(this, "_ZN7S3982C22v7Ev");}
void  S3982C2 ::v8(){vfunc_called(this, "_ZN7S3982C22v8Ev");}
void  S3982C2 ::v9(){vfunc_called(this, "_ZN7S3982C22v9Ev");}
void  S3982C2 ::v10(){vfunc_called(this, "_ZN7S3982C23v10Ev");}
void  S3982C2 ::v11(){vfunc_called(this, "_ZN7S3982C23v11Ev");}
void  S3982C2 ::v12(){vfunc_called(this, "_ZN7S3982C23v12Ev");}
void  S3982C2 ::v13(){vfunc_called(this, "_ZN7S3982C23v13Ev");}
void  S3982C2 ::v14(){vfunc_called(this, "_ZN7S3982C23v14Ev");}
void  S3982C2 ::v15(){vfunc_called(this, "_ZN7S3982C23v15Ev");}
void  S3982C2 ::v16(){vfunc_called(this, "_ZN7S3982C23v16Ev");}
void  S3982C2 ::v17(){vfunc_called(this, "_ZN7S3982C23v17Ev");}
S3982C2 ::S3982C2(){ note_ctor("S3982C2", this);} // tgen

static void Test_S3982C2()
{
  extern Class_Descriptor cd_S3982C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3982C2, buf);
    S3982C2 *dp, &lv = *(dp=new (buf) S3982C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3982C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3982C2)");
    /*is_ambiguous_... S3982C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3982C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3982C4*), ABISELECT(8,4), "S3982C2");
    check_base_class_offset(lv, (S3982C4*), ABISELECT(8,4), "S3982C2");
    check_field_offset(lv, s3982c2f0, ABISELECT(16,8), "S3982C2.s3982c2f0");
    check_field_offset(lv, s3982c2f1, ABISELECT(56,28), "S3982C2.s3982c2f1");
    check_field_offset(lv, s3982c2f2, ABISELECT(64,36), "S3982C2.s3982c2f2");
    check_field_offset(lv, s3982c2f3, ABISELECT(72,40), "S3982C2.s3982c2f3");
    check_field_offset(lv, s3982c2f4, ABISELECT(80,44), "S3982C2.s3982c2f4");
    check_field_offset(lv, s3982c2f5, ABISELECT(88,48), "S3982C2.s3982c2f5");
    check_field_offset(lv, s3982c2f6, ABISELECT(96,52), "S3982C2.s3982c2f6");
    check_field_offset(lv, s3982c2f7, ABISELECT(104,60), "S3982C2.s3982c2f7");
    check_field_offset(lv, s3982c2f8, ABISELECT(112,64), "S3982C2.s3982c2f8");
    test_class_info(&lv, &cd_S3982C2);
    dp->~S3982C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3982C2(Test_S3982C2, "S3982C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3982C2C1Ev();
extern void _ZN7S3982C2D1Ev();
Name_Map name_map_S3982C2[] = {
  NSPAIR(_ZN7S3982C2C1Ev),
  NSPAIR(_ZN7S3982C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3982C4;
extern VTBL_ENTRY _ZTI7S3982C4[];
extern  VTBL_ENTRY _ZTV7S3982C4[];
static Base_Class bases_S3982C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3982C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3982C2[];
extern void _ZN7S3982C2D1Ev();
extern void _ZN7S3982C2D0Ev();
extern void _ZN7S3982C22v6Ev();
extern void _ZN7S3982C22v7Ev();
extern void _ZN7S3982C22v8Ev();
extern void _ZN7S3982C22v9Ev();
extern void _ZN7S3982C23v10Ev();
extern void _ZN7S3982C23v11Ev();
extern void _ZN7S3982C23v12Ev();
extern void _ZN7S3982C23v13Ev();
extern void _ZN7S3982C23v14Ev();
extern void _ZN7S3982C23v15Ev();
extern void _ZN7S3982C23v16Ev();
extern void _ZN7S3982C23v17Ev();
extern void ABISELECT(_ZThn8_N7S3982C2D1Ev,_ZThn4_N7S3982C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3982C2D0Ev,_ZThn4_N7S3982C2D0Ev)();
extern void _ZN7S3982C42v5Ev();
static  VTBL_ENTRY vtc_S3982C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3982C2[0]),
  (VTBL_ENTRY)&_ZN7S3982C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3982C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3982C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3982C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3982C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3982C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v17Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3982C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3982C2D1Ev,_ZThn4_N7S3982C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3982C2D0Ev,_ZThn4_N7S3982C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3982C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3982C2[];
extern  VTBL_ENTRY _ZTV7S3982C2[];
Class_Descriptor cd_S3982C2 = {  "S3982C2", // class name
  bases_S3982C2, 3,
  &(vtc_S3982C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3982C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3982C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3982C6  : S4055C3_nt {
  virtual  ~S3982C6(); // _ZN7S3982C6D1Ev
  virtual void  v18(); // _ZN7S3982C63v18Ev
  S3982C6(); // tgen
};
//SIG(-1 S3982C6) C1{ BC2{ vd m} vd v1}


 S3982C6 ::~S3982C6(){ note_dtor("S3982C6", this);}
void  S3982C6 ::v18(){vfunc_called(this, "_ZN7S3982C63v18Ev");}
S3982C6 ::S3982C6(){ note_ctor("S3982C6", this);} // tgen

static void Test_S3982C6()
{
  extern Class_Descriptor cd_S3982C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3982C6, buf);
    S3982C6 *dp, &lv = *(dp=new (buf) S3982C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3982C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3982C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3982C6");
    test_class_info(&lv, &cd_S3982C6);
    dp->~S3982C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3982C6(Test_S3982C6, "S3982C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3982C6C1Ev();
extern void _ZN7S3982C6D1Ev();
Name_Map name_map_S3982C6[] = {
  NSPAIR(_ZN7S3982C6C1Ev),
  NSPAIR(_ZN7S3982C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3982C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3982C6[];
extern void _ZN7S3982C6D1Ev();
extern void _ZN7S3982C6D0Ev();
extern void _ZN7S3982C63v18Ev();
static  VTBL_ENTRY vtc_S3982C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3982C6[0]),
  (VTBL_ENTRY)&_ZN7S3982C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3982C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3982C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S3982C6[];
extern  VTBL_ENTRY _ZTV7S3982C6[];
Class_Descriptor cd_S3982C6 = {  "S3982C6", // class name
  bases_S3982C6, 1,
  &(vtc_S3982C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3982C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3982C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3982C1  : S3982C2 , S3982C6 {
  void *s3982c1f0[2];
  int s3982c1f1;
  void *s3982c1f2[2];
  virtual  ~S3982C1(); // _ZN7S3982C1D1Ev
  virtual void  v1(); // _ZN7S3982C12v1Ev
  virtual void  v2(); // _ZN7S3982C12v2Ev
  virtual void  v3(); // _ZN7S3982C12v3Ev
  virtual void  v4(); // _ZN7S3982C12v4Ev
  S3982C1(); // tgen
};
//SIG(1 S3982C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v5} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v18} vd v1 v2 v3 v4 Fp[2] Fi Fp[2]}


 S3982C1 ::~S3982C1(){ note_dtor("S3982C1", this);}
void  S3982C1 ::v1(){vfunc_called(this, "_ZN7S3982C12v1Ev");}
void  S3982C1 ::v2(){vfunc_called(this, "_ZN7S3982C12v2Ev");}
void  S3982C1 ::v3(){vfunc_called(this, "_ZN7S3982C12v3Ev");}
void  S3982C1 ::v4(){vfunc_called(this, "_ZN7S3982C12v4Ev");}
S3982C1 ::S3982C1(){ note_ctor("S3982C1", this);} // tgen

static void Test_S3982C1()
{
  extern Class_Descriptor cd_S3982C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,25)];
    init_test(&cd_S3982C1, buf);
    S3982C1 *dp, &lv = *(dp=new (buf) S3982C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,96), "sizeof(S3982C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3982C1)");
    /*is_ambiguous_... S3982C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3982C2*), 0, "S3982C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3982C4*)(S3982C2*), ABISELECT(8,4), "S3982C1");
    check_base_class_offset(lv, (S3982C4*)(S3982C2*), ABISELECT(8,4), "S3982C1");
    check_base_class_offset(lv, (S3982C2*), 0, "S3982C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3982C6*), ABISELECT(120,72), "S3982C1");
    check_base_class_offset(lv, (S3982C6*), ABISELECT(120,72), "S3982C1");
    check_field_offset(lv, s3982c1f0, ABISELECT(128,76), "S3982C1.s3982c1f0");
    check_field_offset(lv, s3982c1f1, ABISELECT(144,84), "S3982C1.s3982c1f1");
    check_field_offset(lv, s3982c1f2, ABISELECT(152,88), "S3982C1.s3982c1f2");
    test_class_info(&lv, &cd_S3982C1);
    dp->~S3982C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3982C1(Test_S3982C1, "S3982C1", ABISELECT(168,96));

#else // __cplusplus

extern void _ZN7S3982C1C1Ev();
extern void _ZN7S3982C1D1Ev();
Name_Map name_map_S3982C1[] = {
  NSPAIR(_ZN7S3982C1C1Ev),
  NSPAIR(_ZN7S3982C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3982C4;
extern VTBL_ENTRY _ZTI7S3982C4[];
extern  VTBL_ENTRY _ZTV7S3982C4[];
extern Class_Descriptor cd_S3982C2;
extern VTBL_ENTRY _ZTI7S3982C2[];
extern  VTBL_ENTRY _ZTV7S3982C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3982C6;
extern VTBL_ENTRY _ZTI7S3982C6[];
extern  VTBL_ENTRY _ZTV7S3982C6[];
static Base_Class bases_S3982C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3982C4,    ABISELECT(8,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3982C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3982C6,    ABISELECT(120,72), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3982C1[];
extern void _ZN7S3982C1D1Ev();
extern void _ZN7S3982C1D0Ev();
extern void _ZN7S3982C22v6Ev();
extern void _ZN7S3982C22v7Ev();
extern void _ZN7S3982C22v8Ev();
extern void _ZN7S3982C22v9Ev();
extern void _ZN7S3982C23v10Ev();
extern void _ZN7S3982C23v11Ev();
extern void _ZN7S3982C23v12Ev();
extern void _ZN7S3982C23v13Ev();
extern void _ZN7S3982C23v14Ev();
extern void _ZN7S3982C23v15Ev();
extern void _ZN7S3982C23v16Ev();
extern void _ZN7S3982C23v17Ev();
extern void _ZN7S3982C12v1Ev();
extern void _ZN7S3982C12v2Ev();
extern void _ZN7S3982C12v3Ev();
extern void _ZN7S3982C12v4Ev();
extern void ABISELECT(_ZThn8_N7S3982C1D1Ev,_ZThn4_N7S3982C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3982C1D0Ev,_ZThn4_N7S3982C1D0Ev)();
extern void _ZN7S3982C42v5Ev();
extern void ABISELECT(_ZThn120_N7S3982C1D1Ev,_ZThn72_N7S3982C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3982C1D0Ev,_ZThn72_N7S3982C1D0Ev)();
extern void _ZN7S3982C63v18Ev();
static  VTBL_ENTRY vtc_S3982C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3982C1[0]),
  (VTBL_ENTRY)&_ZN7S3982C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3982C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3982C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3982C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3982C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3982C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3982C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3982C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3982C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3982C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3982C12v4Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3982C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3982C1D1Ev,_ZThn4_N7S3982C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3982C1D0Ev,_ZThn4_N7S3982C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3982C42v5Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3982C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3982C1D1Ev,_ZThn72_N7S3982C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3982C1D0Ev,_ZThn72_N7S3982C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3982C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S3982C1[];
extern  VTBL_ENTRY _ZTV7S3982C1[];
Class_Descriptor cd_S3982C1 = {  "S3982C1", // class name
  bases_S3982C1, 6,
  &(vtc_S3982C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,96), // object size
  NSPAIRA(_ZTI7S3982C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3982C1),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3986C4  : S4055C3_nt {
  virtual  ~S3986C4(); // _ZN7S3986C4D1Ev
  virtual void  v5(); // _ZN7S3986C42v5Ev
  S3986C4(); // tgen
};
//SIG(-1 S3986C4) C1{ BC2{ vd m} vd v1}


 S3986C4 ::~S3986C4(){ note_dtor("S3986C4", this);}
void  S3986C4 ::v5(){vfunc_called(this, "_ZN7S3986C42v5Ev");}
S3986C4 ::S3986C4(){ note_ctor("S3986C4", this);} // tgen

static void Test_S3986C4()
{
  extern Class_Descriptor cd_S3986C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3986C4, buf);
    S3986C4 *dp, &lv = *(dp=new (buf) S3986C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3986C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3986C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3986C4");
    test_class_info(&lv, &cd_S3986C4);
    dp->~S3986C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3986C4(Test_S3986C4, "S3986C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3986C4C1Ev();
extern void _ZN7S3986C4D1Ev();
Name_Map name_map_S3986C4[] = {
  NSPAIR(_ZN7S3986C4C1Ev),
  NSPAIR(_ZN7S3986C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3986C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3986C4[];
extern void _ZN7S3986C4D1Ev();
extern void _ZN7S3986C4D0Ev();
extern void _ZN7S3986C42v5Ev();
static  VTBL_ENTRY vtc_S3986C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3986C4[0]),
  (VTBL_ENTRY)&_ZN7S3986C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3986C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3986C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3986C4[];
extern  VTBL_ENTRY _ZTV7S3986C4[];
Class_Descriptor cd_S3986C4 = {  "S3986C4", // class name
  bases_S3986C4, 1,
  &(vtc_S3986C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3986C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3986C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3986C2  : S4055C3_nt , S3986C4 {
  void *s3986c2f0[5];
  int s3986c2f1[2];
  ::S14975C17_nt s3986c2f2;
  void *s3986c2f3;
  int s3986c2f4;
  void *s3986c2f5;
  int s3986c2f6[2];
  void *s3986c2f7;
  int s3986c2f8[2];
  virtual  ~S3986C2(); // _ZN7S3986C2D1Ev
  virtual void  v6(); // _ZN7S3986C22v6Ev
  virtual void  v7(); // _ZN7S3986C22v7Ev
  virtual void  v8(); // _ZN7S3986C22v8Ev
  virtual void  v9(); // _ZN7S3986C22v9Ev
  virtual void  v10(); // _ZN7S3986C23v10Ev
  virtual void  v11(); // _ZN7S3986C23v11Ev
  virtual void  v12(); // _ZN7S3986C23v12Ev
  virtual void  v13(); // _ZN7S3986C23v13Ev
  virtual void  v14(); // _ZN7S3986C23v14Ev
  virtual void  v15(); // _ZN7S3986C23v15Ev
  virtual void  v16(); // _ZN7S3986C23v16Ev
  virtual void  v17(); // _ZN7S3986C23v17Ev
  S3986C2(); // tgen
};
//SIG(-1 S3986C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3986C2 ::~S3986C2(){ note_dtor("S3986C2", this);}
void  S3986C2 ::v6(){vfunc_called(this, "_ZN7S3986C22v6Ev");}
void  S3986C2 ::v7(){vfunc_called(this, "_ZN7S3986C22v7Ev");}
void  S3986C2 ::v8(){vfunc_called(this, "_ZN7S3986C22v8Ev");}
void  S3986C2 ::v9(){vfunc_called(this, "_ZN7S3986C22v9Ev");}
void  S3986C2 ::v10(){vfunc_called(this, "_ZN7S3986C23v10Ev");}
void  S3986C2 ::v11(){vfunc_called(this, "_ZN7S3986C23v11Ev");}
void  S3986C2 ::v12(){vfunc_called(this, "_ZN7S3986C23v12Ev");}
void  S3986C2 ::v13(){vfunc_called(this, "_ZN7S3986C23v13Ev");}
void  S3986C2 ::v14(){vfunc_called(this, "_ZN7S3986C23v14Ev");}
void  S3986C2 ::v15(){vfunc_called(this, "_ZN7S3986C23v15Ev");}
void  S3986C2 ::v16(){vfunc_called(this, "_ZN7S3986C23v16Ev");}
void  S3986C2 ::v17(){vfunc_called(this, "_ZN7S3986C23v17Ev");}
S3986C2 ::S3986C2(){ note_ctor("S3986C2", this);} // tgen

static void Test_S3986C2()
{
  extern Class_Descriptor cd_S3986C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3986C2, buf);
    S3986C2 *dp, &lv = *(dp=new (buf) S3986C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3986C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3986C2)");
    /*is_ambiguous_... S3986C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3986C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3986C4*), ABISELECT(8,4), "S3986C2");
    check_base_class_offset(lv, (S3986C4*), ABISELECT(8,4), "S3986C2");
    check_field_offset(lv, s3986c2f0, ABISELECT(16,8), "S3986C2.s3986c2f0");
    check_field_offset(lv, s3986c2f1, ABISELECT(56,28), "S3986C2.s3986c2f1");
    check_field_offset(lv, s3986c2f2, ABISELECT(64,36), "S3986C2.s3986c2f2");
    check_field_offset(lv, s3986c2f3, ABISELECT(72,40), "S3986C2.s3986c2f3");
    check_field_offset(lv, s3986c2f4, ABISELECT(80,44), "S3986C2.s3986c2f4");
    check_field_offset(lv, s3986c2f5, ABISELECT(88,48), "S3986C2.s3986c2f5");
    check_field_offset(lv, s3986c2f6, ABISELECT(96,52), "S3986C2.s3986c2f6");
    check_field_offset(lv, s3986c2f7, ABISELECT(104,60), "S3986C2.s3986c2f7");
    check_field_offset(lv, s3986c2f8, ABISELECT(112,64), "S3986C2.s3986c2f8");
    test_class_info(&lv, &cd_S3986C2);
    dp->~S3986C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3986C2(Test_S3986C2, "S3986C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3986C2C1Ev();
extern void _ZN7S3986C2D1Ev();
Name_Map name_map_S3986C2[] = {
  NSPAIR(_ZN7S3986C2C1Ev),
  NSPAIR(_ZN7S3986C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3986C4;
extern VTBL_ENTRY _ZTI7S3986C4[];
extern  VTBL_ENTRY _ZTV7S3986C4[];
static Base_Class bases_S3986C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3986C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3986C2[];
extern void _ZN7S3986C2D1Ev();
extern void _ZN7S3986C2D0Ev();
extern void _ZN7S3986C22v6Ev();
extern void _ZN7S3986C22v7Ev();
extern void _ZN7S3986C22v8Ev();
extern void _ZN7S3986C22v9Ev();
extern void _ZN7S3986C23v10Ev();
extern void _ZN7S3986C23v11Ev();
extern void _ZN7S3986C23v12Ev();
extern void _ZN7S3986C23v13Ev();
extern void _ZN7S3986C23v14Ev();
extern void _ZN7S3986C23v15Ev();
extern void _ZN7S3986C23v16Ev();
extern void _ZN7S3986C23v17Ev();
extern void ABISELECT(_ZThn8_N7S3986C2D1Ev,_ZThn4_N7S3986C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3986C2D0Ev,_ZThn4_N7S3986C2D0Ev)();
extern void _ZN7S3986C42v5Ev();
static  VTBL_ENTRY vtc_S3986C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3986C2[0]),
  (VTBL_ENTRY)&_ZN7S3986C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3986C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3986C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3986C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3986C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3986C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v17Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3986C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3986C2D1Ev,_ZThn4_N7S3986C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3986C2D0Ev,_ZThn4_N7S3986C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3986C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3986C2[];
extern  VTBL_ENTRY _ZTV7S3986C2[];
Class_Descriptor cd_S3986C2 = {  "S3986C2", // class name
  bases_S3986C2, 3,
  &(vtc_S3986C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3986C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3986C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3986C6  : S4055C3_nt {
  virtual  ~S3986C6(); // _ZN7S3986C6D1Ev
  virtual void  v18(); // _ZN7S3986C63v18Ev
  S3986C6(); // tgen
};
//SIG(-1 S3986C6) C1{ BC2{ vd m} vd v1}


 S3986C6 ::~S3986C6(){ note_dtor("S3986C6", this);}
void  S3986C6 ::v18(){vfunc_called(this, "_ZN7S3986C63v18Ev");}
S3986C6 ::S3986C6(){ note_ctor("S3986C6", this);} // tgen

static void Test_S3986C6()
{
  extern Class_Descriptor cd_S3986C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3986C6, buf);
    S3986C6 *dp, &lv = *(dp=new (buf) S3986C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3986C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3986C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3986C6");
    test_class_info(&lv, &cd_S3986C6);
    dp->~S3986C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3986C6(Test_S3986C6, "S3986C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3986C6C1Ev();
extern void _ZN7S3986C6D1Ev();
Name_Map name_map_S3986C6[] = {
  NSPAIR(_ZN7S3986C6C1Ev),
  NSPAIR(_ZN7S3986C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3986C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3986C6[];
extern void _ZN7S3986C6D1Ev();
extern void _ZN7S3986C6D0Ev();
extern void _ZN7S3986C63v18Ev();
static  VTBL_ENTRY vtc_S3986C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3986C6[0]),
  (VTBL_ENTRY)&_ZN7S3986C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3986C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3986C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S3986C6[];
extern  VTBL_ENTRY _ZTV7S3986C6[];
Class_Descriptor cd_S3986C6 = {  "S3986C6", // class name
  bases_S3986C6, 1,
  &(vtc_S3986C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3986C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3986C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3986C1  : S3986C2 , S3986C6 {
  void *s3986c1f0[3];
  int s3986c1f1;
  void *s3986c1f2;
  virtual  ~S3986C1(); // _ZN7S3986C1D1Ev
  virtual void  v1(); // _ZN7S3986C12v1Ev
  virtual void  v2(); // _ZN7S3986C12v2Ev
  virtual void  v3(); // _ZN7S3986C12v3Ev
  virtual void  v4(); // _ZN7S3986C12v4Ev
  S3986C1(); // tgen
};
//SIG(1 S3986C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v5} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v18} vd v1 v2 v3 v4 Fp[3] Fi Fp}


 S3986C1 ::~S3986C1(){ note_dtor("S3986C1", this);}
void  S3986C1 ::v1(){vfunc_called(this, "_ZN7S3986C12v1Ev");}
void  S3986C1 ::v2(){vfunc_called(this, "_ZN7S3986C12v2Ev");}
void  S3986C1 ::v3(){vfunc_called(this, "_ZN7S3986C12v3Ev");}
void  S3986C1 ::v4(){vfunc_called(this, "_ZN7S3986C12v4Ev");}
S3986C1 ::S3986C1(){ note_ctor("S3986C1", this);} // tgen

static void Test_S3986C1()
{
  extern Class_Descriptor cd_S3986C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,25)];
    init_test(&cd_S3986C1, buf);
    S3986C1 *dp, &lv = *(dp=new (buf) S3986C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,96), "sizeof(S3986C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3986C1)");
    /*is_ambiguous_... S3986C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3986C2*), 0, "S3986C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3986C4*)(S3986C2*), ABISELECT(8,4), "S3986C1");
    check_base_class_offset(lv, (S3986C4*)(S3986C2*), ABISELECT(8,4), "S3986C1");
    check_base_class_offset(lv, (S3986C2*), 0, "S3986C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3986C6*), ABISELECT(120,72), "S3986C1");
    check_base_class_offset(lv, (S3986C6*), ABISELECT(120,72), "S3986C1");
    check_field_offset(lv, s3986c1f0, ABISELECT(128,76), "S3986C1.s3986c1f0");
    check_field_offset(lv, s3986c1f1, ABISELECT(152,88), "S3986C1.s3986c1f1");
    check_field_offset(lv, s3986c1f2, ABISELECT(160,92), "S3986C1.s3986c1f2");
    test_class_info(&lv, &cd_S3986C1);
    dp->~S3986C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3986C1(Test_S3986C1, "S3986C1", ABISELECT(168,96));

#else // __cplusplus

extern void _ZN7S3986C1C1Ev();
extern void _ZN7S3986C1D1Ev();
Name_Map name_map_S3986C1[] = {
  NSPAIR(_ZN7S3986C1C1Ev),
  NSPAIR(_ZN7S3986C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3986C4;
extern VTBL_ENTRY _ZTI7S3986C4[];
extern  VTBL_ENTRY _ZTV7S3986C4[];
extern Class_Descriptor cd_S3986C2;
extern VTBL_ENTRY _ZTI7S3986C2[];
extern  VTBL_ENTRY _ZTV7S3986C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3986C6;
extern VTBL_ENTRY _ZTI7S3986C6[];
extern  VTBL_ENTRY _ZTV7S3986C6[];
static Base_Class bases_S3986C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3986C4,    ABISELECT(8,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3986C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3986C6,    ABISELECT(120,72), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3986C1[];
extern void _ZN7S3986C1D1Ev();
extern void _ZN7S3986C1D0Ev();
extern void _ZN7S3986C22v6Ev();
extern void _ZN7S3986C22v7Ev();
extern void _ZN7S3986C22v8Ev();
extern void _ZN7S3986C22v9Ev();
extern void _ZN7S3986C23v10Ev();
extern void _ZN7S3986C23v11Ev();
extern void _ZN7S3986C23v12Ev();
extern void _ZN7S3986C23v13Ev();
extern void _ZN7S3986C23v14Ev();
extern void _ZN7S3986C23v15Ev();
extern void _ZN7S3986C23v16Ev();
extern void _ZN7S3986C23v17Ev();
extern void _ZN7S3986C12v1Ev();
extern void _ZN7S3986C12v2Ev();
extern void _ZN7S3986C12v3Ev();
extern void _ZN7S3986C12v4Ev();
extern void ABISELECT(_ZThn8_N7S3986C1D1Ev,_ZThn4_N7S3986C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3986C1D0Ev,_ZThn4_N7S3986C1D0Ev)();
extern void _ZN7S3986C42v5Ev();
extern void ABISELECT(_ZThn120_N7S3986C1D1Ev,_ZThn72_N7S3986C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3986C1D0Ev,_ZThn72_N7S3986C1D0Ev)();
extern void _ZN7S3986C63v18Ev();
static  VTBL_ENTRY vtc_S3986C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3986C1[0]),
  (VTBL_ENTRY)&_ZN7S3986C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3986C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3986C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3986C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3986C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3986C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3986C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3986C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3986C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3986C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3986C12v4Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3986C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3986C1D1Ev,_ZThn4_N7S3986C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3986C1D0Ev,_ZThn4_N7S3986C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3986C42v5Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3986C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3986C1D1Ev,_ZThn72_N7S3986C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3986C1D0Ev,_ZThn72_N7S3986C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3986C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S3986C1[];
extern  VTBL_ENTRY _ZTV7S3986C1[];
Class_Descriptor cd_S3986C1 = {  "S3986C1", // class name
  bases_S3986C1, 6,
  &(vtc_S3986C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(168,96), // object size
  NSPAIRA(_ZTI7S3986C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3986C1),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3984C4  : S4055C3_nt {
  virtual  ~S3984C4(); // _ZN7S3984C4D1Ev
  virtual void  v5(); // _ZN7S3984C42v5Ev
  S3984C4(); // tgen
};
//SIG(-1 S3984C4) C1{ BC2{ vd m} vd v1}


 S3984C4 ::~S3984C4(){ note_dtor("S3984C4", this);}
void  S3984C4 ::v5(){vfunc_called(this, "_ZN7S3984C42v5Ev");}
S3984C4 ::S3984C4(){ note_ctor("S3984C4", this);} // tgen

static void Test_S3984C4()
{
  extern Class_Descriptor cd_S3984C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3984C4, buf);
    S3984C4 *dp, &lv = *(dp=new (buf) S3984C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3984C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3984C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3984C4");
    test_class_info(&lv, &cd_S3984C4);
    dp->~S3984C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3984C4(Test_S3984C4, "S3984C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3984C4C1Ev();
extern void _ZN7S3984C4D1Ev();
Name_Map name_map_S3984C4[] = {
  NSPAIR(_ZN7S3984C4C1Ev),
  NSPAIR(_ZN7S3984C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3984C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3984C4[];
extern void _ZN7S3984C4D1Ev();
extern void _ZN7S3984C4D0Ev();
extern void _ZN7S3984C42v5Ev();
static  VTBL_ENTRY vtc_S3984C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3984C4[0]),
  (VTBL_ENTRY)&_ZN7S3984C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3984C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3984C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3984C4[];
extern  VTBL_ENTRY _ZTV7S3984C4[];
Class_Descriptor cd_S3984C4 = {  "S3984C4", // class name
  bases_S3984C4, 1,
  &(vtc_S3984C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3984C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3984C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3984C2  : S4055C3_nt , S3984C4 {
  void *s3984c2f0[5];
  int s3984c2f1[2];
  ::S14975C17_nt s3984c2f2;
  void *s3984c2f3;
  int s3984c2f4;
  void *s3984c2f5;
  int s3984c2f6[2];
  void *s3984c2f7;
  int s3984c2f8[2];
  virtual  ~S3984C2(); // _ZN7S3984C2D1Ev
  virtual void  v6(); // _ZN7S3984C22v6Ev
  virtual void  v7(); // _ZN7S3984C22v7Ev
  virtual void  v8(); // _ZN7S3984C22v8Ev
  virtual void  v9(); // _ZN7S3984C22v9Ev
  virtual void  v10(); // _ZN7S3984C23v10Ev
  virtual void  v11(); // _ZN7S3984C23v11Ev
  virtual void  v12(); // _ZN7S3984C23v12Ev
  virtual void  v13(); // _ZN7S3984C23v13Ev
  virtual void  v14(); // _ZN7S3984C23v14Ev
  virtual void  v15(); // _ZN7S3984C23v15Ev
  virtual void  v16(); // _ZN7S3984C23v16Ev
  virtual void  v17(); // _ZN7S3984C23v17Ev
  S3984C2(); // tgen
};
//SIG(-1 S3984C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3984C2 ::~S3984C2(){ note_dtor("S3984C2", this);}
void  S3984C2 ::v6(){vfunc_called(this, "_ZN7S3984C22v6Ev");}
void  S3984C2 ::v7(){vfunc_called(this, "_ZN7S3984C22v7Ev");}
void  S3984C2 ::v8(){vfunc_called(this, "_ZN7S3984C22v8Ev");}
void  S3984C2 ::v9(){vfunc_called(this, "_ZN7S3984C22v9Ev");}
void  S3984C2 ::v10(){vfunc_called(this, "_ZN7S3984C23v10Ev");}
void  S3984C2 ::v11(){vfunc_called(this, "_ZN7S3984C23v11Ev");}
void  S3984C2 ::v12(){vfunc_called(this, "_ZN7S3984C23v12Ev");}
void  S3984C2 ::v13(){vfunc_called(this, "_ZN7S3984C23v13Ev");}
void  S3984C2 ::v14(){vfunc_called(this, "_ZN7S3984C23v14Ev");}
void  S3984C2 ::v15(){vfunc_called(this, "_ZN7S3984C23v15Ev");}
void  S3984C2 ::v16(){vfunc_called(this, "_ZN7S3984C23v16Ev");}
void  S3984C2 ::v17(){vfunc_called(this, "_ZN7S3984C23v17Ev");}
S3984C2 ::S3984C2(){ note_ctor("S3984C2", this);} // tgen

static void Test_S3984C2()
{
  extern Class_Descriptor cd_S3984C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3984C2, buf);
    S3984C2 *dp, &lv = *(dp=new (buf) S3984C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3984C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3984C2)");
    /*is_ambiguous_... S3984C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3984C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3984C4*), ABISELECT(8,4), "S3984C2");
    check_base_class_offset(lv, (S3984C4*), ABISELECT(8,4), "S3984C2");
    check_field_offset(lv, s3984c2f0, ABISELECT(16,8), "S3984C2.s3984c2f0");
    check_field_offset(lv, s3984c2f1, ABISELECT(56,28), "S3984C2.s3984c2f1");
    check_field_offset(lv, s3984c2f2, ABISELECT(64,36), "S3984C2.s3984c2f2");
    check_field_offset(lv, s3984c2f3, ABISELECT(72,40), "S3984C2.s3984c2f3");
    check_field_offset(lv, s3984c2f4, ABISELECT(80,44), "S3984C2.s3984c2f4");
    check_field_offset(lv, s3984c2f5, ABISELECT(88,48), "S3984C2.s3984c2f5");
    check_field_offset(lv, s3984c2f6, ABISELECT(96,52), "S3984C2.s3984c2f6");
    check_field_offset(lv, s3984c2f7, ABISELECT(104,60), "S3984C2.s3984c2f7");
    check_field_offset(lv, s3984c2f8, ABISELECT(112,64), "S3984C2.s3984c2f8");
    test_class_info(&lv, &cd_S3984C2);
    dp->~S3984C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3984C2(Test_S3984C2, "S3984C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3984C2C1Ev();
extern void _ZN7S3984C2D1Ev();
Name_Map name_map_S3984C2[] = {
  NSPAIR(_ZN7S3984C2C1Ev),
  NSPAIR(_ZN7S3984C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3984C4;
extern VTBL_ENTRY _ZTI7S3984C4[];
extern  VTBL_ENTRY _ZTV7S3984C4[];
static Base_Class bases_S3984C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3984C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3984C2[];
extern void _ZN7S3984C2D1Ev();
extern void _ZN7S3984C2D0Ev();
extern void _ZN7S3984C22v6Ev();
extern void _ZN7S3984C22v7Ev();
extern void _ZN7S3984C22v8Ev();
extern void _ZN7S3984C22v9Ev();
extern void _ZN7S3984C23v10Ev();
extern void _ZN7S3984C23v11Ev();
extern void _ZN7S3984C23v12Ev();
extern void _ZN7S3984C23v13Ev();
extern void _ZN7S3984C23v14Ev();
extern void _ZN7S3984C23v15Ev();
extern void _ZN7S3984C23v16Ev();
extern void _ZN7S3984C23v17Ev();
extern void ABISELECT(_ZThn8_N7S3984C2D1Ev,_ZThn4_N7S3984C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3984C2D0Ev,_ZThn4_N7S3984C2D0Ev)();
extern void _ZN7S3984C42v5Ev();
static  VTBL_ENTRY vtc_S3984C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3984C2[0]),
  (VTBL_ENTRY)&_ZN7S3984C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3984C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3984C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3984C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3984C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3984C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v17Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3984C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3984C2D1Ev,_ZThn4_N7S3984C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3984C2D0Ev,_ZThn4_N7S3984C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3984C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3984C2[];
extern  VTBL_ENTRY _ZTV7S3984C2[];
Class_Descriptor cd_S3984C2 = {  "S3984C2", // class name
  bases_S3984C2, 3,
  &(vtc_S3984C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3984C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3984C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3984C6  : S4055C3_nt {
  virtual  ~S3984C6(); // _ZN7S3984C6D1Ev
  virtual void  v18(); // _ZN7S3984C63v18Ev
  S3984C6(); // tgen
};
//SIG(-1 S3984C6) C1{ BC2{ vd m} vd v1}


 S3984C6 ::~S3984C6(){ note_dtor("S3984C6", this);}
void  S3984C6 ::v18(){vfunc_called(this, "_ZN7S3984C63v18Ev");}
S3984C6 ::S3984C6(){ note_ctor("S3984C6", this);} // tgen

static void Test_S3984C6()
{
  extern Class_Descriptor cd_S3984C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3984C6, buf);
    S3984C6 *dp, &lv = *(dp=new (buf) S3984C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3984C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3984C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3984C6");
    test_class_info(&lv, &cd_S3984C6);
    dp->~S3984C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3984C6(Test_S3984C6, "S3984C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3984C6C1Ev();
extern void _ZN7S3984C6D1Ev();
Name_Map name_map_S3984C6[] = {
  NSPAIR(_ZN7S3984C6C1Ev),
  NSPAIR(_ZN7S3984C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3984C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3984C6[];
extern void _ZN7S3984C6D1Ev();
extern void _ZN7S3984C6D0Ev();
extern void _ZN7S3984C63v18Ev();
static  VTBL_ENTRY vtc_S3984C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3984C6[0]),
  (VTBL_ENTRY)&_ZN7S3984C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3984C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3984C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S3984C6[];
extern  VTBL_ENTRY _ZTV7S3984C6[];
Class_Descriptor cd_S3984C6 = {  "S3984C6", // class name
  bases_S3984C6, 1,
  &(vtc_S3984C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3984C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3984C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3984C1  : S3984C2 , S3984C6 {
  void *s3984c1f0[2];
  int s3984c1f1;
  void *s3984c1f2;
  virtual  ~S3984C1(); // _ZN7S3984C1D1Ev
  virtual void  v1(); // _ZN7S3984C12v1Ev
  virtual void  v2(); // _ZN7S3984C12v2Ev
  virtual void  v3(); // _ZN7S3984C12v3Ev
  virtual void  v4(); // _ZN7S3984C12v4Ev
  S3984C1(); // tgen
};
//SIG(1 S3984C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v5} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v18} vd v1 v2 v3 v4 Fp[2] Fi Fp}


 S3984C1 ::~S3984C1(){ note_dtor("S3984C1", this);}
void  S3984C1 ::v1(){vfunc_called(this, "_ZN7S3984C12v1Ev");}
void  S3984C1 ::v2(){vfunc_called(this, "_ZN7S3984C12v2Ev");}
void  S3984C1 ::v3(){vfunc_called(this, "_ZN7S3984C12v3Ev");}
void  S3984C1 ::v4(){vfunc_called(this, "_ZN7S3984C12v4Ev");}
S3984C1 ::S3984C1(){ note_ctor("S3984C1", this);} // tgen

static void Test_S3984C1()
{
  extern Class_Descriptor cd_S3984C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,24)];
    init_test(&cd_S3984C1, buf);
    S3984C1 *dp, &lv = *(dp=new (buf) S3984C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,92), "sizeof(S3984C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3984C1)");
    /*is_ambiguous_... S3984C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3984C2*), 0, "S3984C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3984C4*)(S3984C2*), ABISELECT(8,4), "S3984C1");
    check_base_class_offset(lv, (S3984C4*)(S3984C2*), ABISELECT(8,4), "S3984C1");
    check_base_class_offset(lv, (S3984C2*), 0, "S3984C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3984C6*), ABISELECT(120,72), "S3984C1");
    check_base_class_offset(lv, (S3984C6*), ABISELECT(120,72), "S3984C1");
    check_field_offset(lv, s3984c1f0, ABISELECT(128,76), "S3984C1.s3984c1f0");
    check_field_offset(lv, s3984c1f1, ABISELECT(144,84), "S3984C1.s3984c1f1");
    check_field_offset(lv, s3984c1f2, ABISELECT(152,88), "S3984C1.s3984c1f2");
    test_class_info(&lv, &cd_S3984C1);
    dp->~S3984C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3984C1(Test_S3984C1, "S3984C1", ABISELECT(160,92));

#else // __cplusplus

extern void _ZN7S3984C1C1Ev();
extern void _ZN7S3984C1D1Ev();
Name_Map name_map_S3984C1[] = {
  NSPAIR(_ZN7S3984C1C1Ev),
  NSPAIR(_ZN7S3984C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3984C4;
extern VTBL_ENTRY _ZTI7S3984C4[];
extern  VTBL_ENTRY _ZTV7S3984C4[];
extern Class_Descriptor cd_S3984C2;
extern VTBL_ENTRY _ZTI7S3984C2[];
extern  VTBL_ENTRY _ZTV7S3984C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3984C6;
extern VTBL_ENTRY _ZTI7S3984C6[];
extern  VTBL_ENTRY _ZTV7S3984C6[];
static Base_Class bases_S3984C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3984C4,    ABISELECT(8,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3984C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3984C6,    ABISELECT(120,72), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3984C1[];
extern void _ZN7S3984C1D1Ev();
extern void _ZN7S3984C1D0Ev();
extern void _ZN7S3984C22v6Ev();
extern void _ZN7S3984C22v7Ev();
extern void _ZN7S3984C22v8Ev();
extern void _ZN7S3984C22v9Ev();
extern void _ZN7S3984C23v10Ev();
extern void _ZN7S3984C23v11Ev();
extern void _ZN7S3984C23v12Ev();
extern void _ZN7S3984C23v13Ev();
extern void _ZN7S3984C23v14Ev();
extern void _ZN7S3984C23v15Ev();
extern void _ZN7S3984C23v16Ev();
extern void _ZN7S3984C23v17Ev();
extern void _ZN7S3984C12v1Ev();
extern void _ZN7S3984C12v2Ev();
extern void _ZN7S3984C12v3Ev();
extern void _ZN7S3984C12v4Ev();
extern void ABISELECT(_ZThn8_N7S3984C1D1Ev,_ZThn4_N7S3984C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3984C1D0Ev,_ZThn4_N7S3984C1D0Ev)();
extern void _ZN7S3984C42v5Ev();
extern void ABISELECT(_ZThn120_N7S3984C1D1Ev,_ZThn72_N7S3984C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3984C1D0Ev,_ZThn72_N7S3984C1D0Ev)();
extern void _ZN7S3984C63v18Ev();
static  VTBL_ENTRY vtc_S3984C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3984C1[0]),
  (VTBL_ENTRY)&_ZN7S3984C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3984C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3984C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3984C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3984C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3984C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3984C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3984C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3984C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3984C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3984C12v4Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3984C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3984C1D1Ev,_ZThn4_N7S3984C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3984C1D0Ev,_ZThn4_N7S3984C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3984C42v5Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3984C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3984C1D1Ev,_ZThn72_N7S3984C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3984C1D0Ev,_ZThn72_N7S3984C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3984C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S3984C1[];
extern  VTBL_ENTRY _ZTV7S3984C1[];
Class_Descriptor cd_S3984C1 = {  "S3984C1", // class name
  bases_S3984C1, 6,
  &(vtc_S3984C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(160,92), // object size
  NSPAIRA(_ZTI7S3984C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3984C1),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S789C6  : S4055C3_nt {
  virtual  ~S789C6(); // _ZN6S789C6D1Ev
  virtual void  v1(); // _ZN6S789C62v1Ev
  S789C6(); // tgen
};
//SIG(-1 S789C6) C1{ BC2{ vd m} vd v1}


 S789C6 ::~S789C6(){ note_dtor("S789C6", this);}
void  S789C6 ::v1(){vfunc_called(this, "_ZN6S789C62v1Ev");}
S789C6 ::S789C6(){ note_ctor("S789C6", this);} // tgen

static void Test_S789C6()
{
  extern Class_Descriptor cd_S789C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S789C6, buf);
    S789C6 *dp, &lv = *(dp=new (buf) S789C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S789C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S789C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S789C6");
    test_class_info(&lv, &cd_S789C6);
    dp->~S789C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS789C6(Test_S789C6, "S789C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S789C6C1Ev();
extern void _ZN6S789C6D1Ev();
Name_Map name_map_S789C6[] = {
  NSPAIR(_ZN6S789C6C1Ev),
  NSPAIR(_ZN6S789C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S789C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S789C6[];
extern void _ZN6S789C6D1Ev();
extern void _ZN6S789C6D0Ev();
extern void _ZN6S789C62v1Ev();
static  VTBL_ENTRY vtc_S789C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S789C6[0]),
  (VTBL_ENTRY)&_ZN6S789C6D1Ev,
  (VTBL_ENTRY)&_ZN6S789C6D0Ev,
  (VTBL_ENTRY)&_ZN6S789C62v1Ev,
};
extern VTBL_ENTRY _ZTI6S789C6[];
extern  VTBL_ENTRY _ZTV6S789C6[];
Class_Descriptor cd_S789C6 = {  "S789C6", // class name
  bases_S789C6, 1,
  &(vtc_S789C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S789C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S789C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S789C7  : S4055C3_nt {
  virtual  ~S789C7(); // _ZN6S789C7D1Ev
  virtual void  v2(); // _ZN6S789C72v2Ev
  S789C7(); // tgen
};
//SIG(-1 S789C7) C1{ BC2{ vd m} vd v1}


 S789C7 ::~S789C7(){ note_dtor("S789C7", this);}
void  S789C7 ::v2(){vfunc_called(this, "_ZN6S789C72v2Ev");}
S789C7 ::S789C7(){ note_ctor("S789C7", this);} // tgen

static void Test_S789C7()
{
  extern Class_Descriptor cd_S789C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S789C7, buf);
    S789C7 *dp, &lv = *(dp=new (buf) S789C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S789C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S789C7)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S789C7");
    test_class_info(&lv, &cd_S789C7);
    dp->~S789C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS789C7(Test_S789C7, "S789C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN6S789C7C1Ev();
extern void _ZN6S789C7D1Ev();
Name_Map name_map_S789C7[] = {
  NSPAIR(_ZN6S789C7C1Ev),
  NSPAIR(_ZN6S789C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S789C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S789C7[];
extern void _ZN6S789C7D1Ev();
extern void _ZN6S789C7D0Ev();
extern void _ZN6S789C72v2Ev();
static  VTBL_ENTRY vtc_S789C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S789C7[0]),
  (VTBL_ENTRY)&_ZN6S789C7D1Ev,
  (VTBL_ENTRY)&_ZN6S789C7D0Ev,
  (VTBL_ENTRY)&_ZN6S789C72v2Ev,
};
extern VTBL_ENTRY _ZTI6S789C7[];
extern  VTBL_ENTRY _ZTV6S789C7[];
Class_Descriptor cd_S789C7 = {  "S789C7", // class name
  bases_S789C7, 1,
  &(vtc_S789C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI6S789C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S789C7),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S789C4  : S4055C3_nt , S789C6 , S789C7 {
  virtual  ~S789C4(); // _ZN6S789C4D1Ev
  virtual void  v3(); // _ZN6S789C42v3Ev
  virtual void  v4(); // _ZN6S789C42v4Ev
  virtual void  v5(); // _ZN6S789C42v5Ev
  virtual void  v6(); // _ZN6S789C42v6Ev
  virtual void  v7(); // _ZN6S789C42v7Ev
  virtual void  v8(); // _ZN6S789C42v8Ev
  S789C4(); // tgen
};
//SIG(-1 S789C4) C1{ BC2{ vd m} BC3{ BC2 vd v7} BC4{ BC2 vd v8} vd v1 v2 v3 v4 v5 v6}


 S789C4 ::~S789C4(){ note_dtor("S789C4", this);}
void  S789C4 ::v3(){vfunc_called(this, "_ZN6S789C42v3Ev");}
void  S789C4 ::v4(){vfunc_called(this, "_ZN6S789C42v4Ev");}
void  S789C4 ::v5(){vfunc_called(this, "_ZN6S789C42v5Ev");}
void  S789C4 ::v6(){vfunc_called(this, "_ZN6S789C42v6Ev");}
void  S789C4 ::v7(){vfunc_called(this, "_ZN6S789C42v7Ev");}
void  S789C4 ::v8(){vfunc_called(this, "_ZN6S789C42v8Ev");}
S789C4 ::S789C4(){ note_ctor("S789C4", this);} // tgen

static void Test_S789C4()
{
  extern Class_Descriptor cd_S789C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S789C4, buf);
    S789C4 *dp, &lv = *(dp=new (buf) S789C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S789C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S789C4)");
    /*is_ambiguous_... S789C4::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S789C4");
    check_base_class_offset(lv, (S4055C3_nt*)(S789C6*), ABISELECT(8,4), "S789C4");
    check_base_class_offset(lv, (S789C6*), ABISELECT(8,4), "S789C4");
    check_base_class_offset(lv, (S4055C3_nt*)(S789C7*), ABISELECT(16,8), "S789C4");
    check_base_class_offset(lv, (S789C7*), ABISELECT(16,8), "S789C4");
    test_class_info(&lv, &cd_S789C4);
    dp->~S789C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS789C4(Test_S789C4, "S789C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S789C4C1Ev();
extern void _ZN6S789C4D1Ev();
Name_Map name_map_S789C4[] = {
  NSPAIR(_ZN6S789C4C1Ev),
  NSPAIR(_ZN6S789C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S789C6;
extern VTBL_ENTRY _ZTI6S789C6[];
extern  VTBL_ENTRY _ZTV6S789C6[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S789C7;
extern VTBL_ENTRY _ZTI6S789C7[];
extern  VTBL_ENTRY _ZTV6S789C7[];
static Base_Class bases_S789C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S789C6,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S789C7,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S789C4[];
extern void _ZN6S789C4D1Ev();
extern void _ZN6S789C4D0Ev();
extern void _ZN6S789C42v3Ev();
extern void _ZN6S789C42v4Ev();
extern void _ZN6S789C42v5Ev();
extern void _ZN6S789C42v6Ev();
extern void _ZN6S789C42v7Ev();
extern void _ZN6S789C42v8Ev();
extern void ABISELECT(_ZThn8_N6S789C4D1Ev,_ZThn4_N6S789C4D1Ev)();
extern void ABISELECT(_ZThn8_N6S789C4D0Ev,_ZThn4_N6S789C4D0Ev)();
extern void _ZN6S789C62v1Ev();
extern void ABISELECT(_ZThn16_N6S789C4D1Ev,_ZThn8_N6S789C4D1Ev)();
extern void ABISELECT(_ZThn16_N6S789C4D0Ev,_ZThn8_N6S789C4D0Ev)();
extern void _ZN6S789C72v2Ev();
static  VTBL_ENTRY vtc_S789C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S789C4[0]),
  (VTBL_ENTRY)&_ZN6S789C4D1Ev,
  (VTBL_ENTRY)&_ZN6S789C4D0Ev,
  (VTBL_ENTRY)&_ZN6S789C42v3Ev,
  (VTBL_ENTRY)&_ZN6S789C42v4Ev,
  (VTBL_ENTRY)&_ZN6S789C42v5Ev,
  (VTBL_ENTRY)&_ZN6S789C42v6Ev,
  (VTBL_ENTRY)&_ZN6S789C42v7Ev,
  (VTBL_ENTRY)&_ZN6S789C42v8Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S789C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S789C4D1Ev,_ZThn4_N6S789C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S789C4D0Ev,_ZThn4_N6S789C4D0Ev),
  (VTBL_ENTRY)&_ZN6S789C62v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI6S789C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N6S789C4D1Ev,_ZThn8_N6S789C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N6S789C4D0Ev,_ZThn8_N6S789C4D0Ev),
  (VTBL_ENTRY)&_ZN6S789C72v2Ev,
};
extern VTBL_ENTRY _ZTI6S789C4[];
extern  VTBL_ENTRY _ZTV6S789C4[];
Class_Descriptor cd_S789C4 = {  "S789C4", // class name
  bases_S789C4, 5,
  &(vtc_S789C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S789C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV6S789C4),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S789C3  : S789C4 {
  ::S8310C14 s789c3f0;
  void *s789c3f1;
  virtual  ~S789C3(); // _ZN6S789C3D1Ev
  virtual void  v9(); // _ZN6S789C32v9Ev
  virtual void  v10(); // _ZN6S789C33v10Ev
  virtual void  v11(); // _ZN6S789C33v11Ev
  virtual void  v12(); // _ZN6S789C33v12Ev
  virtual void  v13(); // _ZN6S789C33v13Ev
  virtual void  v14(); // _ZN6S789C33v14Ev
  virtual void  v15(); // _ZN6S789C33v15Ev
  virtual void  v16(); // _ZN6S789C33v16Ev
  S789C3(); // tgen
};
//SIG(-1 S789C3) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v9} BC5{ BC3 vd v10} vd v11 v12 v13 v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 FC6{ BC7{ BC3 BC8{ BC3 vd v25} BC9{ BC3 vd v26} vd v27 v28 v29 v30 v31 v32} vd v17 v18 v19 v20 v21 v22 v23 v24 Fi} Fp}


 S789C3 ::~S789C3(){ note_dtor("S789C3", this);}
void  S789C3 ::v9(){vfunc_called(this, "_ZN6S789C32v9Ev");}
void  S789C3 ::v10(){vfunc_called(this, "_ZN6S789C33v10Ev");}
void  S789C3 ::v11(){vfunc_called(this, "_ZN6S789C33v11Ev");}
void  S789C3 ::v12(){vfunc_called(this, "_ZN6S789C33v12Ev");}
void  S789C3 ::v13(){vfunc_called(this, "_ZN6S789C33v13Ev");}
void  S789C3 ::v14(){vfunc_called(this, "_ZN6S789C33v14Ev");}
void  S789C3 ::v15(){vfunc_called(this, "_ZN6S789C33v15Ev");}
void  S789C3 ::v16(){vfunc_called(this, "_ZN6S789C33v16Ev");}
S789C3 ::S789C3(){ note_ctor("S789C3", this);} // tgen

static void Test_S789C3()
{
  extern Class_Descriptor cd_S789C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S789C3, buf);
    S789C3 *dp, &lv = *(dp=new (buf) S789C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S789C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S789C3)");
    /*is_ambiguous_... S789C4::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S789C4*), 0, "S789C3");
    check_base_class_offset(lv, (S4055C3_nt*)(S789C6*)(S789C4*), ABISELECT(8,4), "S789C3");
    check_base_class_offset(lv, (S789C6*)(S789C4*), ABISELECT(8,4), "S789C3");
    check_base_class_offset(lv, (S4055C3_nt*)(S789C7*)(S789C4*), ABISELECT(16,8), "S789C3");
    check_base_class_offset(lv, (S789C7*)(S789C4*), ABISELECT(16,8), "S789C3");
    check_base_class_offset(lv, (S789C4*), 0, "S789C3");
    check_field_offset(lv, s789c3f0, ABISELECT(24,12), "S789C3.s789c3f0");
    check_field_offset(lv, s789c3f1, ABISELECT(56,28), "S789C3.s789c3f1");
    test_class_info(&lv, &cd_S789C3);
    dp->~S789C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS789C3(Test_S789C3, "S789C3", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN6S789C3C1Ev();
extern void _ZN6S789C3D1Ev();
Name_Map name_map_S789C3[] = {
  NSPAIR(_ZN6S789C3C1Ev),
  NSPAIR(_ZN6S789C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S789C6;
extern VTBL_ENTRY _ZTI6S789C6[];
extern  VTBL_ENTRY _ZTV6S789C6[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S789C7;
extern VTBL_ENTRY _ZTI6S789C7[];
extern  VTBL_ENTRY _ZTV6S789C7[];
extern Class_Descriptor cd_S789C4;
extern VTBL_ENTRY _ZTI6S789C4[];
extern  VTBL_ENTRY _ZTV6S789C4[];
static Base_Class bases_S789C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S789C6,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S789C7,    ABISELECT(16,8), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S789C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S789C3[];
extern void _ZN6S789C3D1Ev();
extern void _ZN6S789C3D0Ev();
extern void _ZN6S789C42v3Ev();
extern void _ZN6S789C42v4Ev();
extern void _ZN6S789C42v5Ev();
extern void _ZN6S789C42v6Ev();
extern void _ZN6S789C42v7Ev();
extern void _ZN6S789C42v8Ev();
extern void _ZN6S789C32v9Ev();
extern void _ZN6S789C33v10Ev();
extern void _ZN6S789C33v11Ev();
extern void _ZN6S789C33v12Ev();
extern void _ZN6S789C33v13Ev();
extern void _ZN6S789C33v14Ev();
extern void _ZN6S789C33v15Ev();
extern void _ZN6S789C33v16Ev();
extern void ABISELECT(_ZThn8_N6S789C3D1Ev,_ZThn4_N6S789C3D1Ev)();
extern void ABISELECT(_ZThn8_N6S789C3D0Ev,_ZThn4_N6S789C3D0Ev)();
extern void _ZN6S789C62v1Ev();
extern void ABISELECT(_ZThn16_N6S789C3D1Ev,_ZThn8_N6S789C3D1Ev)();
extern void ABISELECT(_ZThn16_N6S789C3D0Ev,_ZThn8_N6S789C3D0Ev)();
extern void _ZN6S789C72v2Ev();
static  VTBL_ENTRY vtc_S789C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S789C3[0]),
  (VTBL_ENTRY)&_ZN6S789C3D1Ev,
  (VTBL_ENTRY)&_ZN6S789C3D0Ev,
  (VTBL_ENTRY)&_ZN6S789C42v3Ev,
  (VTBL_ENTRY)&_ZN6S789C42v4Ev,
  (VTBL_ENTRY)&_ZN6S789C42v5Ev,
  (VTBL_ENTRY)&_ZN6S789C42v6Ev,
  (VTBL_ENTRY)&_ZN6S789C42v7Ev,
  (VTBL_ENTRY)&_ZN6S789C42v8Ev,
  (VTBL_ENTRY)&_ZN6S789C32v9Ev,
  (VTBL_ENTRY)&_ZN6S789C33v10Ev,
  (VTBL_ENTRY)&_ZN6S789C33v11Ev,
  (VTBL_ENTRY)&_ZN6S789C33v12Ev,
  (VTBL_ENTRY)&_ZN6S789C33v13Ev,
  (VTBL_ENTRY)&_ZN6S789C33v14Ev,
  (VTBL_ENTRY)&_ZN6S789C33v15Ev,
  (VTBL_ENTRY)&_ZN6S789C33v16Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S789C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S789C3D1Ev,_ZThn4_N6S789C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S789C3D0Ev,_ZThn4_N6S789C3D0Ev),
  (VTBL_ENTRY)&_ZN6S789C62v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI6S789C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N6S789C3D1Ev,_ZThn8_N6S789C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N6S789C3D0Ev,_ZThn8_N6S789C3D0Ev),
  (VTBL_ENTRY)&_ZN6S789C72v2Ev,
};
extern VTBL_ENTRY _ZTI6S789C3[];
extern  VTBL_ENTRY _ZTV6S789C3[];
Class_Descriptor cd_S789C3 = {  "S789C3", // class name
  bases_S789C3, 6,
  &(vtc_S789C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI6S789C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S789C3),28, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S789C2  : S789C3 {
  virtual  ~S789C2(); // _ZN6S789C2D1Ev
  S789C2(); // tgen
};
//SIG(-1 S789C2) C1{ BC2{ BC3{ BC4{ vd m} BC5{ BC4 vd v1} BC6{ BC4 vd v2} vd v3 v4 v5 v6 v7 v8} vd v9 v10 v11 v12 v13 v14 v15 v16 FC7{ BC8{ BC4 BC9{ BC4 vd v25} BC10{ BC4 vd v26} vd v27 v28 v29 v30 v31 v32} vd v17 v18 v19 v20 v21 v22 v23 v24 Fi} Fp} vd}


 S789C2 ::~S789C2(){ note_dtor("S789C2", this);}
S789C2 ::S789C2(){ note_ctor("S789C2", this);} // tgen

static void Test_S789C2()
{
  extern Class_Descriptor cd_S789C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S789C2, buf);
    S789C2 *dp, &lv = *(dp=new (buf) S789C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S789C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S789C2)");
    /*is_ambiguous_... S789C4::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S789C4*)(S789C3*), 0, "S789C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S789C6*)(S789C4*)(S789C3*), ABISELECT(8,4), "S789C2");
    check_base_class_offset(lv, (S789C6*)(S789C4*)(S789C3*), ABISELECT(8,4), "S789C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S789C7*)(S789C4*)(S789C3*), ABISELECT(16,8), "S789C2");
    check_base_class_offset(lv, (S789C7*)(S789C4*)(S789C3*), ABISELECT(16,8), "S789C2");
    check_base_class_offset(lv, (S789C4*)(S789C3*), 0, "S789C2");
    check_base_class_offset(lv, (S789C3*), 0, "S789C2");
    test_class_info(&lv, &cd_S789C2);
    dp->~S789C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS789C2(Test_S789C2, "S789C2", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN6S789C2C1Ev();
extern void _ZN6S789C2D1Ev();
Name_Map name_map_S789C2[] = {
  NSPAIR(_ZN6S789C2C1Ev),
  NSPAIR(_ZN6S789C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S789C6;
extern VTBL_ENTRY _ZTI6S789C6[];
extern  VTBL_ENTRY _ZTV6S789C6[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S789C7;
extern VTBL_ENTRY _ZTI6S789C7[];
extern  VTBL_ENTRY _ZTV6S789C7[];
extern Class_Descriptor cd_S789C4;
extern VTBL_ENTRY _ZTI6S789C4[];
extern  VTBL_ENTRY _ZTV6S789C4[];
extern Class_Descriptor cd_S789C3;
extern VTBL_ENTRY _ZTI6S789C3[];
extern  VTBL_ENTRY _ZTV6S789C3[];
static Base_Class bases_S789C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S789C6,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S789C7,    ABISELECT(16,8), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S789C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S789C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S789C2[];
extern void _ZN6S789C2D1Ev();
extern void _ZN6S789C2D0Ev();
extern void _ZN6S789C42v3Ev();
extern void _ZN6S789C42v4Ev();
extern void _ZN6S789C42v5Ev();
extern void _ZN6S789C42v6Ev();
extern void _ZN6S789C42v7Ev();
extern void _ZN6S789C42v8Ev();
extern void _ZN6S789C32v9Ev();
extern void _ZN6S789C33v10Ev();
extern void _ZN6S789C33v11Ev();
extern void _ZN6S789C33v12Ev();
extern void _ZN6S789C33v13Ev();
extern void _ZN6S789C33v14Ev();
extern void _ZN6S789C33v15Ev();
extern void _ZN6S789C33v16Ev();
extern void ABISELECT(_ZThn8_N6S789C2D1Ev,_ZThn4_N6S789C2D1Ev)();
extern void ABISELECT(_ZThn8_N6S789C2D0Ev,_ZThn4_N6S789C2D0Ev)();
extern void _ZN6S789C62v1Ev();
extern void ABISELECT(_ZThn16_N6S789C2D1Ev,_ZThn8_N6S789C2D1Ev)();
extern void ABISELECT(_ZThn16_N6S789C2D0Ev,_ZThn8_N6S789C2D0Ev)();
extern void _ZN6S789C72v2Ev();
static  VTBL_ENTRY vtc_S789C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S789C2[0]),
  (VTBL_ENTRY)&_ZN6S789C2D1Ev,
  (VTBL_ENTRY)&_ZN6S789C2D0Ev,
  (VTBL_ENTRY)&_ZN6S789C42v3Ev,
  (VTBL_ENTRY)&_ZN6S789C42v4Ev,
  (VTBL_ENTRY)&_ZN6S789C42v5Ev,
  (VTBL_ENTRY)&_ZN6S789C42v6Ev,
  (VTBL_ENTRY)&_ZN6S789C42v7Ev,
  (VTBL_ENTRY)&_ZN6S789C42v8Ev,
  (VTBL_ENTRY)&_ZN6S789C32v9Ev,
  (VTBL_ENTRY)&_ZN6S789C33v10Ev,
  (VTBL_ENTRY)&_ZN6S789C33v11Ev,
  (VTBL_ENTRY)&_ZN6S789C33v12Ev,
  (VTBL_ENTRY)&_ZN6S789C33v13Ev,
  (VTBL_ENTRY)&_ZN6S789C33v14Ev,
  (VTBL_ENTRY)&_ZN6S789C33v15Ev,
  (VTBL_ENTRY)&_ZN6S789C33v16Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S789C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S789C2D1Ev,_ZThn4_N6S789C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S789C2D0Ev,_ZThn4_N6S789C2D0Ev),
  (VTBL_ENTRY)&_ZN6S789C62v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI6S789C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N6S789C2D1Ev,_ZThn8_N6S789C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N6S789C2D0Ev,_ZThn8_N6S789C2D0Ev),
  (VTBL_ENTRY)&_ZN6S789C72v2Ev,
};
extern VTBL_ENTRY _ZTI6S789C2[];
extern  VTBL_ENTRY _ZTV6S789C2[];
Class_Descriptor cd_S789C2 = {  "S789C2", // class name
  bases_S789C2, 7,
  &(vtc_S789C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI6S789C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S789C2),28, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  7, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S789C1  : S789C2 {
  ~S789C1(); // tgen
  S789C1(); // tgen
};
//SIG(1 S789C1) C1{ BC2{ BC3{ BC4{ BC5{ vd m} BC6{ BC5 vd v1} BC7{ BC5 vd v2} vd v3 v4 v5 v6 v7 v8} vd v9 v10 v11 v12 v13 v14 v15 v16 FC8{ BC9{ BC5 BC10{ BC5 vd v25} BC11{ BC5 vd v26} vd v27 v28 v29 v30 v31 v32} vd v17 v18 v19 v20 v21 v22 v23 v24 Fi} Fp} vd}}


S789C1 ::~S789C1(){ note_dtor("S789C1", this);} // tgen
S789C1 ::S789C1(){ note_ctor("S789C1", this);} // tgen

static void Test_S789C1()
{
  extern Class_Descriptor cd_S789C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S789C1, buf);
    S789C1 *dp, &lv = *(dp=new (buf) S789C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S789C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S789C1)");
    /*is_ambiguous_... S789C4::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S789C4*)(S789C3*)(S789C2*), 0, "S789C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S789C6*)(S789C4*)(S789C3*)(S789C2*), ABISELECT(8,4), "S789C1");
    check_base_class_offset(lv, (S789C6*)(S789C4*)(S789C3*)(S789C2*), ABISELECT(8,4), "S789C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S789C7*)(S789C4*)(S789C3*)(S789C2*), ABISELECT(16,8), "S789C1");
    check_base_class_offset(lv, (S789C7*)(S789C4*)(S789C3*)(S789C2*), ABISELECT(16,8), "S789C1");
    check_base_class_offset(lv, (S789C4*)(S789C3*)(S789C2*), 0, "S789C1");
    check_base_class_offset(lv, (S789C3*)(S789C2*), 0, "S789C1");
    check_base_class_offset(lv, (S789C2*), 0, "S789C1");
    test_class_info(&lv, &cd_S789C1);
    dp->~S789C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS789C1(Test_S789C1, "S789C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN6S789C1C1Ev();
extern void _ZN6S789C1D1Ev();
Name_Map name_map_S789C1[] = {
  NSPAIR(_ZN6S789C1C1Ev),
  NSPAIR(_ZN6S789C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S789C6;
extern VTBL_ENTRY _ZTI6S789C6[];
extern  VTBL_ENTRY _ZTV6S789C6[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S789C7;
extern VTBL_ENTRY _ZTI6S789C7[];
extern  VTBL_ENTRY _ZTV6S789C7[];
extern Class_Descriptor cd_S789C4;
extern VTBL_ENTRY _ZTI6S789C4[];
extern  VTBL_ENTRY _ZTV6S789C4[];
extern Class_Descriptor cd_S789C3;
extern VTBL_ENTRY _ZTI6S789C3[];
extern  VTBL_ENTRY _ZTV6S789C3[];
extern Class_Descriptor cd_S789C2;
extern VTBL_ENTRY _ZTI6S789C2[];
extern  VTBL_ENTRY _ZTV6S789C2[];
static Base_Class bases_S789C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S789C6,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S789C7,    ABISELECT(16,8), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S789C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S789C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S789C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S789C1[];
extern void _ZN6S789C1D1Ev();
extern void _ZN6S789C1D0Ev();
extern void _ZN6S789C42v3Ev();
extern void _ZN6S789C42v4Ev();
extern void _ZN6S789C42v5Ev();
extern void _ZN6S789C42v6Ev();
extern void _ZN6S789C42v7Ev();
extern void _ZN6S789C42v8Ev();
extern void _ZN6S789C32v9Ev();
extern void _ZN6S789C33v10Ev();
extern void _ZN6S789C33v11Ev();
extern void _ZN6S789C33v12Ev();
extern void _ZN6S789C33v13Ev();
extern void _ZN6S789C33v14Ev();
extern void _ZN6S789C33v15Ev();
extern void _ZN6S789C33v16Ev();
extern void ABISELECT(_ZThn8_N6S789C1D1Ev,_ZThn4_N6S789C1D1Ev)();
extern void ABISELECT(_ZThn8_N6S789C1D0Ev,_ZThn4_N6S789C1D0Ev)();
extern void _ZN6S789C62v1Ev();
extern void ABISELECT(_ZThn16_N6S789C1D1Ev,_ZThn8_N6S789C1D1Ev)();
extern void ABISELECT(_ZThn16_N6S789C1D0Ev,_ZThn8_N6S789C1D0Ev)();
extern void _ZN6S789C72v2Ev();
static  VTBL_ENTRY vtc_S789C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S789C1[0]),
  (VTBL_ENTRY)&_ZN6S789C1D1Ev,
  (VTBL_ENTRY)&_ZN6S789C1D0Ev,
  (VTBL_ENTRY)&_ZN6S789C42v3Ev,
  (VTBL_ENTRY)&_ZN6S789C42v4Ev,
  (VTBL_ENTRY)&_ZN6S789C42v5Ev,
  (VTBL_ENTRY)&_ZN6S789C42v6Ev,
  (VTBL_ENTRY)&_ZN6S789C42v7Ev,
  (VTBL_ENTRY)&_ZN6S789C42v8Ev,
  (VTBL_ENTRY)&_ZN6S789C32v9Ev,
  (VTBL_ENTRY)&_ZN6S789C33v10Ev,
  (VTBL_ENTRY)&_ZN6S789C33v11Ev,
  (VTBL_ENTRY)&_ZN6S789C33v12Ev,
  (VTBL_ENTRY)&_ZN6S789C33v13Ev,
  (VTBL_ENTRY)&_ZN6S789C33v14Ev,
  (VTBL_ENTRY)&_ZN6S789C33v15Ev,
  (VTBL_ENTRY)&_ZN6S789C33v16Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI6S789C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S789C1D1Ev,_ZThn4_N6S789C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N6S789C1D0Ev,_ZThn4_N6S789C1D0Ev),
  (VTBL_ENTRY)&_ZN6S789C62v1Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI6S789C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N6S789C1D1Ev,_ZThn8_N6S789C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N6S789C1D0Ev,_ZThn8_N6S789C1D0Ev),
  (VTBL_ENTRY)&_ZN6S789C72v2Ev,
};
extern VTBL_ENTRY _ZTI6S789C1[];
extern  VTBL_ENTRY _ZTV6S789C1[];
Class_Descriptor cd_S789C1 = {  "S789C1", // class name
  bases_S789C1, 8,
  &(vtc_S789C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI6S789C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S789C1),28, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  8, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4452C3  {
  ::S21714C10_nt s4452c3f0;
  int s4452c3f1[2];
  char s4452c3f2;
  virtual  ~S4452C3(); // _ZN7S4452C3D1Ev
  virtual void  v2(); // _ZN7S4452C32v2Ev
  virtual void  v3(); // _ZN7S4452C32v3Ev
  virtual void  v4(); // _ZN7S4452C32v4Ev
  S4452C3(); // tgen
};
//SIG(-1 S4452C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4452C3 ::~S4452C3(){ note_dtor("S4452C3", this);}
void  S4452C3 ::v2(){vfunc_called(this, "_ZN7S4452C32v2Ev");}
void  S4452C3 ::v3(){vfunc_called(this, "_ZN7S4452C32v3Ev");}
void  S4452C3 ::v4(){vfunc_called(this, "_ZN7S4452C32v4Ev");}
S4452C3 ::S4452C3(){ note_ctor("S4452C3", this);} // tgen

static void Test_S4452C3()
{
  extern Class_Descriptor cd_S4452C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4452C3, buf);
    S4452C3 *dp, &lv = *(dp=new (buf) S4452C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4452C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4452C3)");
    check_field_offset(lv, s4452c3f0, ABISELECT(8,4), "S4452C3.s4452c3f0");
    check_field_offset(lv, s4452c3f1, ABISELECT(24,16), "S4452C3.s4452c3f1");
    check_field_offset(lv, s4452c3f2, ABISELECT(32,24), "S4452C3.s4452c3f2");
    test_class_info(&lv, &cd_S4452C3);
    dp->~S4452C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4452C3(Test_S4452C3, "S4452C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4452C3C1Ev();
extern void _ZN7S4452C3D1Ev();
Name_Map name_map_S4452C3[] = {
  NSPAIR(_ZN7S4452C3C1Ev),
  NSPAIR(_ZN7S4452C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4452C3[];
extern void _ZN7S4452C3D1Ev();
extern void _ZN7S4452C3D0Ev();
extern void _ZN7S4452C32v2Ev();
extern void _ZN7S4452C32v3Ev();
extern void _ZN7S4452C32v4Ev();
static  VTBL_ENTRY vtc_S4452C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4452C3[0]),
  (VTBL_ENTRY)&_ZN7S4452C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4452C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4452C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4452C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4452C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4452C3[];
extern  VTBL_ENTRY _ZTV7S4452C3[];
Class_Descriptor cd_S4452C3 = {  "S4452C3", // class name
  0,0,//no base classes
  &(vtc_S4452C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4452C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4452C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4452C2  : S4452C3 {
  int s4452c2f0;
  ::S9538C4 s4452c2f1;
  virtual  ~S4452C2(); // _ZN7S4452C2D1Ev
  virtual void  v5(); // _ZN7S4452C22v5Ev
  virtual void  v6(); // _ZN7S4452C22v6Ev
  virtual void  v7(); // _ZN7S4452C22v7Ev
  S4452C2(); // tgen
};
//SIG(-1 S4452C2) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 Fi FC5{ m FC6{ m Fp Fi FC7{ m}} Fi FL Fi[2] FL[2] Fc[2] FC6 FC6 FC6 FC6 Fi[3] FC6 FC6 FC6 Fi FC6}}


 S4452C2 ::~S4452C2(){ note_dtor("S4452C2", this);}
void  S4452C2 ::v5(){vfunc_called(this, "_ZN7S4452C22v5Ev");}
void  S4452C2 ::v6(){vfunc_called(this, "_ZN7S4452C22v6Ev");}
void  S4452C2 ::v7(){vfunc_called(this, "_ZN7S4452C22v7Ev");}
S4452C2 ::S4452C2(){ note_ctor("S4452C2", this);} // tgen

static void Test_S4452C2()
{
  extern Class_Descriptor cd_S4452C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S4452C2, buf);
    S4452C2 *dp, &lv = *(dp=new (buf) S4452C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S4452C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4452C2)");
    check_base_class_offset(lv, (S4452C3*), 0, "S4452C2");
    check_field_offset(lv, s4452c2f0, ABISELECT(36,28), "S4452C2.s4452c2f0");
    check_field_offset(lv, s4452c2f1, ABISELECT(40,32), "S4452C2.s4452c2f1");
    test_class_info(&lv, &cd_S4452C2);
    dp->~S4452C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4452C2(Test_S4452C2, "S4452C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S4452C2C1Ev();
extern void _ZN7S4452C2D1Ev();
Name_Map name_map_S4452C2[] = {
  NSPAIR(_ZN7S4452C2C1Ev),
  NSPAIR(_ZN7S4452C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4452C3;
extern VTBL_ENTRY _ZTI7S4452C3[];
extern  VTBL_ENTRY _ZTV7S4452C3[];
static Base_Class bases_S4452C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4452C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4452C2[];
extern void _ZN7S4452C2D1Ev();
extern void _ZN7S4452C2D0Ev();
extern void _ZN7S4452C32v2Ev();
extern void _ZN7S4452C32v3Ev();
extern void _ZN7S4452C32v4Ev();
extern void _ZN7S4452C22v5Ev();
extern void _ZN7S4452C22v6Ev();
extern void _ZN7S4452C22v7Ev();
static  VTBL_ENTRY vtc_S4452C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4452C2[0]),
  (VTBL_ENTRY)&_ZN7S4452C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4452C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4452C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4452C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4452C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4452C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4452C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4452C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4452C2[];
extern  VTBL_ENTRY _ZTV7S4452C2[];
Class_Descriptor cd_S4452C2 = {  "S4452C2", // class name
  bases_S4452C2, 1,
  &(vtc_S4452C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S4452C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4452C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4452C1  : S4452C2 {
  ::S21714C10_nt s4452c1f0;
  ::S21714C10_nt s4452c1f1;
  int s4452c1f2;
  virtual  ~S4452C1(); // _ZN7S4452C1D1Ev
  virtual void  v1(); // _ZN7S4452C12v1Ev
  S4452C1(); // tgen
};
//SIG(1 S4452C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 v6 v7 Fi FC6{ m FC7{ m Fp Fi FC8{ m}} Fi FL Fi[2] FL[2] Fc[2] FC7 FC7 FC7 FC7 Fi[3] FC7 FC7 FC7 Fi FC7}} vd v1 FC4 FC4 Fi}


 S4452C1 ::~S4452C1(){ note_dtor("S4452C1", this);}
void  S4452C1 ::v1(){vfunc_called(this, "_ZN7S4452C12v1Ev");}
S4452C1 ::S4452C1(){ note_ctor("S4452C1", this);} // tgen

static void Test_S4452C1()
{
  extern Class_Descriptor cd_S4452C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,57)];
    init_test(&cd_S4452C1, buf);
    S4452C1 *dp, &lv = *(dp=new (buf) S4452C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,224), "sizeof(S4452C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4452C1)");
    check_base_class_offset(lv, (S4452C3*)(S4452C2*), 0, "S4452C1");
    check_base_class_offset(lv, (S4452C2*), 0, "S4452C1");
    check_field_offset(lv, s4452c1f0, ABISELECT(256,196), "S4452C1.s4452c1f0");
    check_field_offset(lv, s4452c1f1, ABISELECT(272,208), "S4452C1.s4452c1f1");
    check_field_offset(lv, s4452c1f2, ABISELECT(288,220), "S4452C1.s4452c1f2");
    test_class_info(&lv, &cd_S4452C1);
    dp->~S4452C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4452C1(Test_S4452C1, "S4452C1", ABISELECT(296,224));

#else // __cplusplus

extern void _ZN7S4452C1C1Ev();
extern void _ZN7S4452C1D1Ev();
Name_Map name_map_S4452C1[] = {
  NSPAIR(_ZN7S4452C1C1Ev),
  NSPAIR(_ZN7S4452C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4452C3;
extern VTBL_ENTRY _ZTI7S4452C3[];
extern  VTBL_ENTRY _ZTV7S4452C3[];
extern Class_Descriptor cd_S4452C2;
extern VTBL_ENTRY _ZTI7S4452C2[];
extern  VTBL_ENTRY _ZTV7S4452C2[];
static Base_Class bases_S4452C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4452C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4452C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4452C1[];
extern void _ZN7S4452C1D1Ev();
extern void _ZN7S4452C1D0Ev();
extern void _ZN7S4452C32v2Ev();
extern void _ZN7S4452C32v3Ev();
extern void _ZN7S4452C32v4Ev();
extern void _ZN7S4452C22v5Ev();
extern void _ZN7S4452C22v6Ev();
extern void _ZN7S4452C22v7Ev();
extern void _ZN7S4452C12v1Ev();
static  VTBL_ENTRY vtc_S4452C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4452C1[0]),
  (VTBL_ENTRY)&_ZN7S4452C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4452C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4452C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4452C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4452C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4452C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4452C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4452C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4452C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4452C1[];
extern  VTBL_ENTRY _ZTV7S4452C1[];
Class_Descriptor cd_S4452C1 = {  "S4452C1", // class name
  bases_S4452C1, 2,
  &(vtc_S4452C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,224), // object size
  NSPAIRA(_ZTI7S4452C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4452C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3998C4  : S4055C3_nt {
  virtual  ~S3998C4(); // _ZN7S3998C4D1Ev
  virtual void  v6(); // _ZN7S3998C42v6Ev
  S3998C4(); // tgen
};
//SIG(-1 S3998C4) C1{ BC2{ vd m} vd v1}


 S3998C4 ::~S3998C4(){ note_dtor("S3998C4", this);}
void  S3998C4 ::v6(){vfunc_called(this, "_ZN7S3998C42v6Ev");}
S3998C4 ::S3998C4(){ note_ctor("S3998C4", this);} // tgen

static void Test_S3998C4()
{
  extern Class_Descriptor cd_S3998C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3998C4, buf);
    S3998C4 *dp, &lv = *(dp=new (buf) S3998C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3998C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3998C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3998C4");
    test_class_info(&lv, &cd_S3998C4);
    dp->~S3998C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3998C4(Test_S3998C4, "S3998C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3998C4C1Ev();
extern void _ZN7S3998C4D1Ev();
Name_Map name_map_S3998C4[] = {
  NSPAIR(_ZN7S3998C4C1Ev),
  NSPAIR(_ZN7S3998C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3998C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3998C4[];
extern void _ZN7S3998C4D1Ev();
extern void _ZN7S3998C4D0Ev();
extern void _ZN7S3998C42v6Ev();
static  VTBL_ENTRY vtc_S3998C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3998C4[0]),
  (VTBL_ENTRY)&_ZN7S3998C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3998C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3998C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3998C4[];
extern  VTBL_ENTRY _ZTV7S3998C4[];
Class_Descriptor cd_S3998C4 = {  "S3998C4", // class name
  bases_S3998C4, 1,
  &(vtc_S3998C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3998C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3998C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3998C2  : S4055C3_nt , S3998C4 {
  void *s3998c2f0[5];
  int s3998c2f1[2];
  ::S14975C17_nt s3998c2f2;
  void *s3998c2f3;
  int s3998c2f4;
  void *s3998c2f5;
  int s3998c2f6[2];
  void *s3998c2f7;
  int s3998c2f8[2];
  virtual  ~S3998C2(); // _ZN7S3998C2D1Ev
  virtual void  v7(); // _ZN7S3998C22v7Ev
  virtual void  v8(); // _ZN7S3998C22v8Ev
  virtual void  v9(); // _ZN7S3998C22v9Ev
  virtual void  v10(); // _ZN7S3998C23v10Ev
  virtual void  v11(); // _ZN7S3998C23v11Ev
  virtual void  v12(); // _ZN7S3998C23v12Ev
  virtual void  v13(); // _ZN7S3998C23v13Ev
  virtual void  v14(); // _ZN7S3998C23v14Ev
  virtual void  v15(); // _ZN7S3998C23v15Ev
  virtual void  v16(); // _ZN7S3998C23v16Ev
  virtual void  v17(); // _ZN7S3998C23v17Ev
  virtual void  v18(); // _ZN7S3998C23v18Ev
  S3998C2(); // tgen
};
//SIG(-1 S3998C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3998C2 ::~S3998C2(){ note_dtor("S3998C2", this);}
void  S3998C2 ::v7(){vfunc_called(this, "_ZN7S3998C22v7Ev");}
void  S3998C2 ::v8(){vfunc_called(this, "_ZN7S3998C22v8Ev");}
void  S3998C2 ::v9(){vfunc_called(this, "_ZN7S3998C22v9Ev");}
void  S3998C2 ::v10(){vfunc_called(this, "_ZN7S3998C23v10Ev");}
void  S3998C2 ::v11(){vfunc_called(this, "_ZN7S3998C23v11Ev");}
void  S3998C2 ::v12(){vfunc_called(this, "_ZN7S3998C23v12Ev");}
void  S3998C2 ::v13(){vfunc_called(this, "_ZN7S3998C23v13Ev");}
void  S3998C2 ::v14(){vfunc_called(this, "_ZN7S3998C23v14Ev");}
void  S3998C2 ::v15(){vfunc_called(this, "_ZN7S3998C23v15Ev");}
void  S3998C2 ::v16(){vfunc_called(this, "_ZN7S3998C23v16Ev");}
void  S3998C2 ::v17(){vfunc_called(this, "_ZN7S3998C23v17Ev");}
void  S3998C2 ::v18(){vfunc_called(this, "_ZN7S3998C23v18Ev");}
S3998C2 ::S3998C2(){ note_ctor("S3998C2", this);} // tgen

static void Test_S3998C2()
{
  extern Class_Descriptor cd_S3998C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3998C2, buf);
    S3998C2 *dp, &lv = *(dp=new (buf) S3998C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3998C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3998C2)");
    /*is_ambiguous_... S3998C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3998C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3998C4*), ABISELECT(8,4), "S3998C2");
    check_base_class_offset(lv, (S3998C4*), ABISELECT(8,4), "S3998C2");
    check_field_offset(lv, s3998c2f0, ABISELECT(16,8), "S3998C2.s3998c2f0");
    check_field_offset(lv, s3998c2f1, ABISELECT(56,28), "S3998C2.s3998c2f1");
    check_field_offset(lv, s3998c2f2, ABISELECT(64,36), "S3998C2.s3998c2f2");
    check_field_offset(lv, s3998c2f3, ABISELECT(72,40), "S3998C2.s3998c2f3");
    check_field_offset(lv, s3998c2f4, ABISELECT(80,44), "S3998C2.s3998c2f4");
    check_field_offset(lv, s3998c2f5, ABISELECT(88,48), "S3998C2.s3998c2f5");
    check_field_offset(lv, s3998c2f6, ABISELECT(96,52), "S3998C2.s3998c2f6");
    check_field_offset(lv, s3998c2f7, ABISELECT(104,60), "S3998C2.s3998c2f7");
    check_field_offset(lv, s3998c2f8, ABISELECT(112,64), "S3998C2.s3998c2f8");
    test_class_info(&lv, &cd_S3998C2);
    dp->~S3998C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3998C2(Test_S3998C2, "S3998C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3998C2C1Ev();
extern void _ZN7S3998C2D1Ev();
Name_Map name_map_S3998C2[] = {
  NSPAIR(_ZN7S3998C2C1Ev),
  NSPAIR(_ZN7S3998C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3998C4;
extern VTBL_ENTRY _ZTI7S3998C4[];
extern  VTBL_ENTRY _ZTV7S3998C4[];
static Base_Class bases_S3998C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3998C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3998C2[];
extern void _ZN7S3998C2D1Ev();
extern void _ZN7S3998C2D0Ev();
extern void _ZN7S3998C22v7Ev();
extern void _ZN7S3998C22v8Ev();
extern void _ZN7S3998C22v9Ev();
extern void _ZN7S3998C23v10Ev();
extern void _ZN7S3998C23v11Ev();
extern void _ZN7S3998C23v12Ev();
extern void _ZN7S3998C23v13Ev();
extern void _ZN7S3998C23v14Ev();
extern void _ZN7S3998C23v15Ev();
extern void _ZN7S3998C23v16Ev();
extern void _ZN7S3998C23v17Ev();
extern void _ZN7S3998C23v18Ev();
extern void ABISELECT(_ZThn8_N7S3998C2D1Ev,_ZThn4_N7S3998C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3998C2D0Ev,_ZThn4_N7S3998C2D0Ev)();
extern void _ZN7S3998C42v6Ev();
static  VTBL_ENTRY vtc_S3998C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3998C2[0]),
  (VTBL_ENTRY)&_ZN7S3998C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3998C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3998C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3998C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3998C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v18Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3998C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3998C2D1Ev,_ZThn4_N7S3998C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3998C2D0Ev,_ZThn4_N7S3998C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3998C42v6Ev,
};
extern VTBL_ENTRY _ZTI7S3998C2[];
extern  VTBL_ENTRY _ZTV7S3998C2[];
Class_Descriptor cd_S3998C2 = {  "S3998C2", // class name
  bases_S3998C2, 3,
  &(vtc_S3998C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3998C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3998C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3998C6  : S4055C3_nt {
  virtual  ~S3998C6(); // _ZN7S3998C6D1Ev
  virtual void  v19(); // _ZN7S3998C63v19Ev
  S3998C6(); // tgen
};
//SIG(-1 S3998C6) C1{ BC2{ vd m} vd v1}


 S3998C6 ::~S3998C6(){ note_dtor("S3998C6", this);}
void  S3998C6 ::v19(){vfunc_called(this, "_ZN7S3998C63v19Ev");}
S3998C6 ::S3998C6(){ note_ctor("S3998C6", this);} // tgen

static void Test_S3998C6()
{
  extern Class_Descriptor cd_S3998C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3998C6, buf);
    S3998C6 *dp, &lv = *(dp=new (buf) S3998C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3998C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3998C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3998C6");
    test_class_info(&lv, &cd_S3998C6);
    dp->~S3998C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3998C6(Test_S3998C6, "S3998C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3998C6C1Ev();
extern void _ZN7S3998C6D1Ev();
Name_Map name_map_S3998C6[] = {
  NSPAIR(_ZN7S3998C6C1Ev),
  NSPAIR(_ZN7S3998C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3998C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3998C6[];
extern void _ZN7S3998C6D1Ev();
extern void _ZN7S3998C6D0Ev();
extern void _ZN7S3998C63v19Ev();
static  VTBL_ENTRY vtc_S3998C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3998C6[0]),
  (VTBL_ENTRY)&_ZN7S3998C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3998C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3998C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3998C6[];
extern  VTBL_ENTRY _ZTV7S3998C6[];
Class_Descriptor cd_S3998C6 = {  "S3998C6", // class name
  bases_S3998C6, 1,
  &(vtc_S3998C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3998C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3998C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3998C1  : S3998C2 , S3998C6 {
  void *s3998c1f0;
  virtual  ~S3998C1(); // _ZN7S3998C1D1Ev
  virtual void  v1(); // _ZN7S3998C12v1Ev
  virtual void  v2(); // _ZN7S3998C12v2Ev
  virtual void  v3(); // _ZN7S3998C12v3Ev
  virtual void  v4(); // _ZN7S3998C12v4Ev
  virtual void  v5(); // _ZN7S3998C12v5Ev
  S3998C1(); // tgen
};
//SIG(1 S3998C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v6} vd v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v19} vd v1 v2 v3 v4 v5 Fp}


 S3998C1 ::~S3998C1(){ note_dtor("S3998C1", this);}
void  S3998C1 ::v1(){vfunc_called(this, "_ZN7S3998C12v1Ev");}
void  S3998C1 ::v2(){vfunc_called(this, "_ZN7S3998C12v2Ev");}
void  S3998C1 ::v3(){vfunc_called(this, "_ZN7S3998C12v3Ev");}
void  S3998C1 ::v4(){vfunc_called(this, "_ZN7S3998C12v4Ev");}
void  S3998C1 ::v5(){vfunc_called(this, "_ZN7S3998C12v5Ev");}
S3998C1 ::S3998C1(){ note_ctor("S3998C1", this);} // tgen

static void Test_S3998C1()
{
  extern Class_Descriptor cd_S3998C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S3998C1, buf);
    S3998C1 *dp, &lv = *(dp=new (buf) S3998C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S3998C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3998C1)");
    /*is_ambiguous_... S3998C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3998C2*), 0, "S3998C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3998C4*)(S3998C2*), ABISELECT(8,4), "S3998C1");
    check_base_class_offset(lv, (S3998C4*)(S3998C2*), ABISELECT(8,4), "S3998C1");
    check_base_class_offset(lv, (S3998C2*), 0, "S3998C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3998C6*), ABISELECT(120,72), "S3998C1");
    check_base_class_offset(lv, (S3998C6*), ABISELECT(120,72), "S3998C1");
    check_field_offset(lv, s3998c1f0, ABISELECT(128,76), "S3998C1.s3998c1f0");
    test_class_info(&lv, &cd_S3998C1);
    dp->~S3998C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3998C1(Test_S3998C1, "S3998C1", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S3998C1C1Ev();
extern void _ZN7S3998C1D1Ev();
Name_Map name_map_S3998C1[] = {
  NSPAIR(_ZN7S3998C1C1Ev),
  NSPAIR(_ZN7S3998C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3998C4;
extern VTBL_ENTRY _ZTI7S3998C4[];
extern  VTBL_ENTRY _ZTV7S3998C4[];
extern Class_Descriptor cd_S3998C2;
extern VTBL_ENTRY _ZTI7S3998C2[];
extern  VTBL_ENTRY _ZTV7S3998C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3998C6;
extern VTBL_ENTRY _ZTI7S3998C6[];
extern  VTBL_ENTRY _ZTV7S3998C6[];
static Base_Class bases_S3998C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3998C4,    ABISELECT(8,4), //bcp->offset
    21, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3998C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3998C6,    ABISELECT(120,72), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3998C1[];
extern void _ZN7S3998C1D1Ev();
extern void _ZN7S3998C1D0Ev();
extern void _ZN7S3998C22v7Ev();
extern void _ZN7S3998C22v8Ev();
extern void _ZN7S3998C22v9Ev();
extern void _ZN7S3998C23v10Ev();
extern void _ZN7S3998C23v11Ev();
extern void _ZN7S3998C23v12Ev();
extern void _ZN7S3998C23v13Ev();
extern void _ZN7S3998C23v14Ev();
extern void _ZN7S3998C23v15Ev();
extern void _ZN7S3998C23v16Ev();
extern void _ZN7S3998C23v17Ev();
extern void _ZN7S3998C23v18Ev();
extern void _ZN7S3998C12v1Ev();
extern void _ZN7S3998C12v2Ev();
extern void _ZN7S3998C12v3Ev();
extern void _ZN7S3998C12v4Ev();
extern void _ZN7S3998C12v5Ev();
extern void ABISELECT(_ZThn8_N7S3998C1D1Ev,_ZThn4_N7S3998C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3998C1D0Ev,_ZThn4_N7S3998C1D0Ev)();
extern void _ZN7S3998C42v6Ev();
extern void ABISELECT(_ZThn120_N7S3998C1D1Ev,_ZThn72_N7S3998C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3998C1D0Ev,_ZThn72_N7S3998C1D0Ev)();
extern void _ZN7S3998C63v19Ev();
static  VTBL_ENTRY vtc_S3998C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3998C1[0]),
  (VTBL_ENTRY)&_ZN7S3998C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3998C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3998C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3998C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3998C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3998C23v18Ev,
  (VTBL_ENTRY)&_ZN7S3998C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3998C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3998C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3998C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3998C12v5Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3998C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3998C1D1Ev,_ZThn4_N7S3998C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3998C1D0Ev,_ZThn4_N7S3998C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3998C42v6Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3998C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3998C1D1Ev,_ZThn72_N7S3998C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3998C1D0Ev,_ZThn72_N7S3998C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3998C63v19Ev,
};
extern VTBL_ENTRY _ZTI7S3998C1[];
extern  VTBL_ENTRY _ZTV7S3998C1[];
Class_Descriptor cd_S3998C1 = {  "S3998C1", // class name
  bases_S3998C1, 6,
  &(vtc_S3998C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S3998C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3998C1),31, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3985C4  : S4055C3_nt {
  virtual  ~S3985C4(); // _ZN7S3985C4D1Ev
  virtual void  v5(); // _ZN7S3985C42v5Ev
  S3985C4(); // tgen
};
//SIG(-1 S3985C4) C1{ BC2{ vd m} vd v1}


 S3985C4 ::~S3985C4(){ note_dtor("S3985C4", this);}
void  S3985C4 ::v5(){vfunc_called(this, "_ZN7S3985C42v5Ev");}
S3985C4 ::S3985C4(){ note_ctor("S3985C4", this);} // tgen

static void Test_S3985C4()
{
  extern Class_Descriptor cd_S3985C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3985C4, buf);
    S3985C4 *dp, &lv = *(dp=new (buf) S3985C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3985C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3985C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3985C4");
    test_class_info(&lv, &cd_S3985C4);
    dp->~S3985C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3985C4(Test_S3985C4, "S3985C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3985C4C1Ev();
extern void _ZN7S3985C4D1Ev();
Name_Map name_map_S3985C4[] = {
  NSPAIR(_ZN7S3985C4C1Ev),
  NSPAIR(_ZN7S3985C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3985C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3985C4[];
extern void _ZN7S3985C4D1Ev();
extern void _ZN7S3985C4D0Ev();
extern void _ZN7S3985C42v5Ev();
static  VTBL_ENTRY vtc_S3985C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3985C4[0]),
  (VTBL_ENTRY)&_ZN7S3985C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3985C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3985C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3985C4[];
extern  VTBL_ENTRY _ZTV7S3985C4[];
Class_Descriptor cd_S3985C4 = {  "S3985C4", // class name
  bases_S3985C4, 1,
  &(vtc_S3985C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3985C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3985C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3985C2  : S4055C3_nt , S3985C4 {
  void *s3985c2f0[5];
  int s3985c2f1[2];
  ::S14975C17_nt s3985c2f2;
  void *s3985c2f3;
  int s3985c2f4;
  void *s3985c2f5;
  int s3985c2f6[2];
  void *s3985c2f7;
  int s3985c2f8[2];
  virtual  ~S3985C2(); // _ZN7S3985C2D1Ev
  virtual void  v6(); // _ZN7S3985C22v6Ev
  virtual void  v7(); // _ZN7S3985C22v7Ev
  virtual void  v8(); // _ZN7S3985C22v8Ev
  virtual void  v9(); // _ZN7S3985C22v9Ev
  virtual void  v10(); // _ZN7S3985C23v10Ev
  virtual void  v11(); // _ZN7S3985C23v11Ev
  virtual void  v12(); // _ZN7S3985C23v12Ev
  virtual void  v13(); // _ZN7S3985C23v13Ev
  virtual void  v14(); // _ZN7S3985C23v14Ev
  virtual void  v15(); // _ZN7S3985C23v15Ev
  virtual void  v16(); // _ZN7S3985C23v16Ev
  virtual void  v17(); // _ZN7S3985C23v17Ev
  S3985C2(); // tgen
};
//SIG(-1 S3985C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3985C2 ::~S3985C2(){ note_dtor("S3985C2", this);}
void  S3985C2 ::v6(){vfunc_called(this, "_ZN7S3985C22v6Ev");}
void  S3985C2 ::v7(){vfunc_called(this, "_ZN7S3985C22v7Ev");}
void  S3985C2 ::v8(){vfunc_called(this, "_ZN7S3985C22v8Ev");}
void  S3985C2 ::v9(){vfunc_called(this, "_ZN7S3985C22v9Ev");}
void  S3985C2 ::v10(){vfunc_called(this, "_ZN7S3985C23v10Ev");}
void  S3985C2 ::v11(){vfunc_called(this, "_ZN7S3985C23v11Ev");}
void  S3985C2 ::v12(){vfunc_called(this, "_ZN7S3985C23v12Ev");}
void  S3985C2 ::v13(){vfunc_called(this, "_ZN7S3985C23v13Ev");}
void  S3985C2 ::v14(){vfunc_called(this, "_ZN7S3985C23v14Ev");}
void  S3985C2 ::v15(){vfunc_called(this, "_ZN7S3985C23v15Ev");}
void  S3985C2 ::v16(){vfunc_called(this, "_ZN7S3985C23v16Ev");}
void  S3985C2 ::v17(){vfunc_called(this, "_ZN7S3985C23v17Ev");}
S3985C2 ::S3985C2(){ note_ctor("S3985C2", this);} // tgen

static void Test_S3985C2()
{
  extern Class_Descriptor cd_S3985C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3985C2, buf);
    S3985C2 *dp, &lv = *(dp=new (buf) S3985C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3985C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3985C2)");
    /*is_ambiguous_... S3985C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3985C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3985C4*), ABISELECT(8,4), "S3985C2");
    check_base_class_offset(lv, (S3985C4*), ABISELECT(8,4), "S3985C2");
    check_field_offset(lv, s3985c2f0, ABISELECT(16,8), "S3985C2.s3985c2f0");
    check_field_offset(lv, s3985c2f1, ABISELECT(56,28), "S3985C2.s3985c2f1");
    check_field_offset(lv, s3985c2f2, ABISELECT(64,36), "S3985C2.s3985c2f2");
    check_field_offset(lv, s3985c2f3, ABISELECT(72,40), "S3985C2.s3985c2f3");
    check_field_offset(lv, s3985c2f4, ABISELECT(80,44), "S3985C2.s3985c2f4");
    check_field_offset(lv, s3985c2f5, ABISELECT(88,48), "S3985C2.s3985c2f5");
    check_field_offset(lv, s3985c2f6, ABISELECT(96,52), "S3985C2.s3985c2f6");
    check_field_offset(lv, s3985c2f7, ABISELECT(104,60), "S3985C2.s3985c2f7");
    check_field_offset(lv, s3985c2f8, ABISELECT(112,64), "S3985C2.s3985c2f8");
    test_class_info(&lv, &cd_S3985C2);
    dp->~S3985C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3985C2(Test_S3985C2, "S3985C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3985C2C1Ev();
extern void _ZN7S3985C2D1Ev();
Name_Map name_map_S3985C2[] = {
  NSPAIR(_ZN7S3985C2C1Ev),
  NSPAIR(_ZN7S3985C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3985C4;
extern VTBL_ENTRY _ZTI7S3985C4[];
extern  VTBL_ENTRY _ZTV7S3985C4[];
static Base_Class bases_S3985C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3985C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3985C2[];
extern void _ZN7S3985C2D1Ev();
extern void _ZN7S3985C2D0Ev();
extern void _ZN7S3985C22v6Ev();
extern void _ZN7S3985C22v7Ev();
extern void _ZN7S3985C22v8Ev();
extern void _ZN7S3985C22v9Ev();
extern void _ZN7S3985C23v10Ev();
extern void _ZN7S3985C23v11Ev();
extern void _ZN7S3985C23v12Ev();
extern void _ZN7S3985C23v13Ev();
extern void _ZN7S3985C23v14Ev();
extern void _ZN7S3985C23v15Ev();
extern void _ZN7S3985C23v16Ev();
extern void _ZN7S3985C23v17Ev();
extern void ABISELECT(_ZThn8_N7S3985C2D1Ev,_ZThn4_N7S3985C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3985C2D0Ev,_ZThn4_N7S3985C2D0Ev)();
extern void _ZN7S3985C42v5Ev();
static  VTBL_ENTRY vtc_S3985C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3985C2[0]),
  (VTBL_ENTRY)&_ZN7S3985C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3985C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3985C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3985C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3985C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3985C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v17Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3985C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3985C2D1Ev,_ZThn4_N7S3985C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3985C2D0Ev,_ZThn4_N7S3985C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3985C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3985C2[];
extern  VTBL_ENTRY _ZTV7S3985C2[];
Class_Descriptor cd_S3985C2 = {  "S3985C2", // class name
  bases_S3985C2, 3,
  &(vtc_S3985C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3985C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3985C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3985C6  : S4055C3_nt {
  virtual  ~S3985C6(); // _ZN7S3985C6D1Ev
  virtual void  v18(); // _ZN7S3985C63v18Ev
  S3985C6(); // tgen
};
//SIG(-1 S3985C6) C1{ BC2{ vd m} vd v1}


 S3985C6 ::~S3985C6(){ note_dtor("S3985C6", this);}
void  S3985C6 ::v18(){vfunc_called(this, "_ZN7S3985C63v18Ev");}
S3985C6 ::S3985C6(){ note_ctor("S3985C6", this);} // tgen

static void Test_S3985C6()
{
  extern Class_Descriptor cd_S3985C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3985C6, buf);
    S3985C6 *dp, &lv = *(dp=new (buf) S3985C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3985C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3985C6)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3985C6");
    test_class_info(&lv, &cd_S3985C6);
    dp->~S3985C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3985C6(Test_S3985C6, "S3985C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3985C6C1Ev();
extern void _ZN7S3985C6D1Ev();
Name_Map name_map_S3985C6[] = {
  NSPAIR(_ZN7S3985C6C1Ev),
  NSPAIR(_ZN7S3985C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3985C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3985C6[];
extern void _ZN7S3985C6D1Ev();
extern void _ZN7S3985C6D0Ev();
extern void _ZN7S3985C63v18Ev();
static  VTBL_ENTRY vtc_S3985C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3985C6[0]),
  (VTBL_ENTRY)&_ZN7S3985C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3985C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3985C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S3985C6[];
extern  VTBL_ENTRY _ZTV7S3985C6[];
Class_Descriptor cd_S3985C6 = {  "S3985C6", // class name
  bases_S3985C6, 1,
  &(vtc_S3985C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3985C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3985C6),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3985C1  : S3985C2 , S3985C6 {
  void *s3985c1f0[2];
  virtual  ~S3985C1(); // _ZN7S3985C1D1Ev
  virtual void  v1(); // _ZN7S3985C12v1Ev
  virtual void  v2(); // _ZN7S3985C12v2Ev
  virtual void  v3(); // _ZN7S3985C12v3Ev
  virtual void  v4(); // _ZN7S3985C12v4Ev
  S3985C1(); // tgen
};
//SIG(1 S3985C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v5} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} BC6{ BC3 vd v18} vd v1 v2 v3 v4 Fp[2]}


 S3985C1 ::~S3985C1(){ note_dtor("S3985C1", this);}
void  S3985C1 ::v1(){vfunc_called(this, "_ZN7S3985C12v1Ev");}
void  S3985C1 ::v2(){vfunc_called(this, "_ZN7S3985C12v2Ev");}
void  S3985C1 ::v3(){vfunc_called(this, "_ZN7S3985C12v3Ev");}
void  S3985C1 ::v4(){vfunc_called(this, "_ZN7S3985C12v4Ev");}
S3985C1 ::S3985C1(){ note_ctor("S3985C1", this);} // tgen

static void Test_S3985C1()
{
  extern Class_Descriptor cd_S3985C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,22)];
    init_test(&cd_S3985C1, buf);
    S3985C1 *dp, &lv = *(dp=new (buf) S3985C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,84), "sizeof(S3985C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3985C1)");
    /*is_ambiguous_... S3985C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3985C2*), 0, "S3985C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3985C4*)(S3985C2*), ABISELECT(8,4), "S3985C1");
    check_base_class_offset(lv, (S3985C4*)(S3985C2*), ABISELECT(8,4), "S3985C1");
    check_base_class_offset(lv, (S3985C2*), 0, "S3985C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3985C6*), ABISELECT(120,72), "S3985C1");
    check_base_class_offset(lv, (S3985C6*), ABISELECT(120,72), "S3985C1");
    check_field_offset(lv, s3985c1f0, ABISELECT(128,76), "S3985C1.s3985c1f0");
    test_class_info(&lv, &cd_S3985C1);
    dp->~S3985C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3985C1(Test_S3985C1, "S3985C1", ABISELECT(144,84));

#else // __cplusplus

extern void _ZN7S3985C1C1Ev();
extern void _ZN7S3985C1D1Ev();
Name_Map name_map_S3985C1[] = {
  NSPAIR(_ZN7S3985C1C1Ev),
  NSPAIR(_ZN7S3985C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3985C4;
extern VTBL_ENTRY _ZTI7S3985C4[];
extern  VTBL_ENTRY _ZTV7S3985C4[];
extern Class_Descriptor cd_S3985C2;
extern VTBL_ENTRY _ZTI7S3985C2[];
extern  VTBL_ENTRY _ZTV7S3985C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3985C6;
extern VTBL_ENTRY _ZTI7S3985C6[];
extern  VTBL_ENTRY _ZTV7S3985C6[];
static Base_Class bases_S3985C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3985C4,    ABISELECT(8,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3985C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(120,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3985C6,    ABISELECT(120,72), //bcp->offset
    25, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3985C1[];
extern void _ZN7S3985C1D1Ev();
extern void _ZN7S3985C1D0Ev();
extern void _ZN7S3985C22v6Ev();
extern void _ZN7S3985C22v7Ev();
extern void _ZN7S3985C22v8Ev();
extern void _ZN7S3985C22v9Ev();
extern void _ZN7S3985C23v10Ev();
extern void _ZN7S3985C23v11Ev();
extern void _ZN7S3985C23v12Ev();
extern void _ZN7S3985C23v13Ev();
extern void _ZN7S3985C23v14Ev();
extern void _ZN7S3985C23v15Ev();
extern void _ZN7S3985C23v16Ev();
extern void _ZN7S3985C23v17Ev();
extern void _ZN7S3985C12v1Ev();
extern void _ZN7S3985C12v2Ev();
extern void _ZN7S3985C12v3Ev();
extern void _ZN7S3985C12v4Ev();
extern void ABISELECT(_ZThn8_N7S3985C1D1Ev,_ZThn4_N7S3985C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3985C1D0Ev,_ZThn4_N7S3985C1D0Ev)();
extern void _ZN7S3985C42v5Ev();
extern void ABISELECT(_ZThn120_N7S3985C1D1Ev,_ZThn72_N7S3985C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S3985C1D0Ev,_ZThn72_N7S3985C1D0Ev)();
extern void _ZN7S3985C63v18Ev();
static  VTBL_ENTRY vtc_S3985C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3985C1[0]),
  (VTBL_ENTRY)&_ZN7S3985C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3985C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3985C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3985C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3985C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3985C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3985C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3985C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3985C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3985C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3985C12v4Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3985C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3985C1D1Ev,_ZThn4_N7S3985C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3985C1D0Ev,_ZThn4_N7S3985C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3985C42v5Ev,
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI7S3985C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3985C1D1Ev,_ZThn72_N7S3985C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn120_N7S3985C1D0Ev,_ZThn72_N7S3985C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3985C63v18Ev,
};
extern VTBL_ENTRY _ZTI7S3985C1[];
extern  VTBL_ENTRY _ZTV7S3985C1[];
Class_Descriptor cd_S3985C1 = {  "S3985C1", // class name
  bases_S3985C1, 6,
  &(vtc_S3985C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,84), // object size
  NSPAIRA(_ZTI7S3985C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3985C1),30, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4454C3  {
  ::S21714C10_nt s4454c3f0;
  int s4454c3f1[2];
  char s4454c3f2;
  virtual  ~S4454C3(); // _ZN7S4454C3D1Ev
  virtual void  v2(); // _ZN7S4454C32v2Ev
  virtual void  v3(); // _ZN7S4454C32v3Ev
  virtual void  v4(); // _ZN7S4454C32v4Ev
  S4454C3(); // tgen
};
//SIG(-1 S4454C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4454C3 ::~S4454C3(){ note_dtor("S4454C3", this);}
void  S4454C3 ::v2(){vfunc_called(this, "_ZN7S4454C32v2Ev");}
void  S4454C3 ::v3(){vfunc_called(this, "_ZN7S4454C32v3Ev");}
void  S4454C3 ::v4(){vfunc_called(this, "_ZN7S4454C32v4Ev");}
S4454C3 ::S4454C3(){ note_ctor("S4454C3", this);} // tgen

static void Test_S4454C3()
{
  extern Class_Descriptor cd_S4454C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4454C3, buf);
    S4454C3 *dp, &lv = *(dp=new (buf) S4454C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4454C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4454C3)");
    check_field_offset(lv, s4454c3f0, ABISELECT(8,4), "S4454C3.s4454c3f0");
    check_field_offset(lv, s4454c3f1, ABISELECT(24,16), "S4454C3.s4454c3f1");
    check_field_offset(lv, s4454c3f2, ABISELECT(32,24), "S4454C3.s4454c3f2");
    test_class_info(&lv, &cd_S4454C3);
    dp->~S4454C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4454C3(Test_S4454C3, "S4454C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4454C3C1Ev();
extern void _ZN7S4454C3D1Ev();
Name_Map name_map_S4454C3[] = {
  NSPAIR(_ZN7S4454C3C1Ev),
  NSPAIR(_ZN7S4454C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4454C3[];
extern void _ZN7S4454C3D1Ev();
extern void _ZN7S4454C3D0Ev();
extern void _ZN7S4454C32v2Ev();
extern void _ZN7S4454C32v3Ev();
extern void _ZN7S4454C32v4Ev();
static  VTBL_ENTRY vtc_S4454C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4454C3[0]),
  (VTBL_ENTRY)&_ZN7S4454C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4454C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4454C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4454C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4454C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4454C3[];
extern  VTBL_ENTRY _ZTV7S4454C3[];
Class_Descriptor cd_S4454C3 = {  "S4454C3", // class name
  0,0,//no base classes
  &(vtc_S4454C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4454C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4454C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4454C2  : S4454C3 {
  int s4454c2f0;
  ::S9538C4 s4454c2f1;
  virtual  ~S4454C2(); // _ZN7S4454C2D1Ev
  virtual void  v5(); // _ZN7S4454C22v5Ev
  virtual void  v6(); // _ZN7S4454C22v6Ev
  virtual void  v7(); // _ZN7S4454C22v7Ev
  S4454C2(); // tgen
};
//SIG(-1 S4454C2) C1{ BC2{ vd v4 v5 v6 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 v3 Fi FC5{ m FC6{ m Fp Fi FC7{ m}} Fi FL Fi[2] FL[2] Fc[2] FC6 FC6 FC6 FC6 Fi[3] FC6 FC6 FC6 Fi FC6}}


 S4454C2 ::~S4454C2(){ note_dtor("S4454C2", this);}
void  S4454C2 ::v5(){vfunc_called(this, "_ZN7S4454C22v5Ev");}
void  S4454C2 ::v6(){vfunc_called(this, "_ZN7S4454C22v6Ev");}
void  S4454C2 ::v7(){vfunc_called(this, "_ZN7S4454C22v7Ev");}
S4454C2 ::S4454C2(){ note_ctor("S4454C2", this);} // tgen

static void Test_S4454C2()
{
  extern Class_Descriptor cd_S4454C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S4454C2, buf);
    S4454C2 *dp, &lv = *(dp=new (buf) S4454C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S4454C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4454C2)");
    check_base_class_offset(lv, (S4454C3*), 0, "S4454C2");
    check_field_offset(lv, s4454c2f0, ABISELECT(36,28), "S4454C2.s4454c2f0");
    check_field_offset(lv, s4454c2f1, ABISELECT(40,32), "S4454C2.s4454c2f1");
    test_class_info(&lv, &cd_S4454C2);
    dp->~S4454C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4454C2(Test_S4454C2, "S4454C2", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S4454C2C1Ev();
extern void _ZN7S4454C2D1Ev();
Name_Map name_map_S4454C2[] = {
  NSPAIR(_ZN7S4454C2C1Ev),
  NSPAIR(_ZN7S4454C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4454C3;
extern VTBL_ENTRY _ZTI7S4454C3[];
extern  VTBL_ENTRY _ZTV7S4454C3[];
static Base_Class bases_S4454C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4454C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4454C2[];
extern void _ZN7S4454C2D1Ev();
extern void _ZN7S4454C2D0Ev();
extern void _ZN7S4454C32v2Ev();
extern void _ZN7S4454C32v3Ev();
extern void _ZN7S4454C32v4Ev();
extern void _ZN7S4454C22v5Ev();
extern void _ZN7S4454C22v6Ev();
extern void _ZN7S4454C22v7Ev();
static  VTBL_ENTRY vtc_S4454C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4454C2[0]),
  (VTBL_ENTRY)&_ZN7S4454C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4454C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4454C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4454C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4454C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4454C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4454C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4454C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4454C2[];
extern  VTBL_ENTRY _ZTV7S4454C2[];
Class_Descriptor cd_S4454C2 = {  "S4454C2", // class name
  bases_S4454C2, 1,
  &(vtc_S4454C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S4454C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4454C2),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4454C1  : S4454C2 {
  virtual  ~S4454C1(); // _ZN7S4454C1D1Ev
  virtual void  v1(); // _ZN7S4454C12v1Ev
  S4454C1(); // tgen
};
//SIG(1 S4454C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} vd v5 v6 v7 Fi FC6{ m FC7{ m Fp Fi FC8{ m}} Fi FL Fi[2] FL[2] Fc[2] FC7 FC7 FC7 FC7 Fi[3] FC7 FC7 FC7 Fi FC7}} vd v1}


 S4454C1 ::~S4454C1(){ note_dtor("S4454C1", this);}
void  S4454C1 ::v1(){vfunc_called(this, "_ZN7S4454C12v1Ev");}
S4454C1 ::S4454C1(){ note_ctor("S4454C1", this);} // tgen

static void Test_S4454C1()
{
  extern Class_Descriptor cd_S4454C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,50)];
    init_test(&cd_S4454C1, buf);
    S4454C1 *dp, &lv = *(dp=new (buf) S4454C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,196), "sizeof(S4454C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4454C1)");
    check_base_class_offset(lv, (S4454C3*)(S4454C2*), 0, "S4454C1");
    check_base_class_offset(lv, (S4454C2*), 0, "S4454C1");
    test_class_info(&lv, &cd_S4454C1);
    dp->~S4454C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4454C1(Test_S4454C1, "S4454C1", ABISELECT(256,196));

#else // __cplusplus

extern void _ZN7S4454C1C1Ev();
extern void _ZN7S4454C1D1Ev();
Name_Map name_map_S4454C1[] = {
  NSPAIR(_ZN7S4454C1C1Ev),
  NSPAIR(_ZN7S4454C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4454C3;
extern VTBL_ENTRY _ZTI7S4454C3[];
extern  VTBL_ENTRY _ZTV7S4454C3[];
extern Class_Descriptor cd_S4454C2;
extern VTBL_ENTRY _ZTI7S4454C2[];
extern  VTBL_ENTRY _ZTV7S4454C2[];
static Base_Class bases_S4454C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4454C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4454C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4454C1[];
extern void _ZN7S4454C1D1Ev();
extern void _ZN7S4454C1D0Ev();
extern void _ZN7S4454C32v2Ev();
extern void _ZN7S4454C32v3Ev();
extern void _ZN7S4454C32v4Ev();
extern void _ZN7S4454C22v5Ev();
extern void _ZN7S4454C22v6Ev();
extern void _ZN7S4454C22v7Ev();
extern void _ZN7S4454C12v1Ev();
static  VTBL_ENTRY vtc_S4454C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4454C1[0]),
  (VTBL_ENTRY)&_ZN7S4454C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4454C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4454C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4454C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4454C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4454C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4454C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4454C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4454C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4454C1[];
extern  VTBL_ENTRY _ZTV7S4454C1[];
Class_Descriptor cd_S4454C1 = {  "S4454C1", // class name
  bases_S4454C1, 2,
  &(vtc_S4454C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI7S4454C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4454C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3989C4  : S4055C3_nt {
  virtual  ~S3989C4(); // _ZN7S3989C4D1Ev
  virtual void  v5(); // _ZN7S3989C42v5Ev
  S3989C4(); // tgen
};
//SIG(-1 S3989C4) C1{ BC2{ vd m} vd v1}


 S3989C4 ::~S3989C4(){ note_dtor("S3989C4", this);}
void  S3989C4 ::v5(){vfunc_called(this, "_ZN7S3989C42v5Ev");}
S3989C4 ::S3989C4(){ note_ctor("S3989C4", this);} // tgen

static void Test_S3989C4()
{
  extern Class_Descriptor cd_S3989C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3989C4, buf);
    S3989C4 *dp, &lv = *(dp=new (buf) S3989C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3989C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3989C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3989C4");
    test_class_info(&lv, &cd_S3989C4);
    dp->~S3989C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3989C4(Test_S3989C4, "S3989C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3989C4C1Ev();
extern void _ZN7S3989C4D1Ev();
Name_Map name_map_S3989C4[] = {
  NSPAIR(_ZN7S3989C4C1Ev),
  NSPAIR(_ZN7S3989C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3989C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3989C4[];
extern void _ZN7S3989C4D1Ev();
extern void _ZN7S3989C4D0Ev();
extern void _ZN7S3989C42v5Ev();
static  VTBL_ENTRY vtc_S3989C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3989C4[0]),
  (VTBL_ENTRY)&_ZN7S3989C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3989C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3989C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3989C4[];
extern  VTBL_ENTRY _ZTV7S3989C4[];
Class_Descriptor cd_S3989C4 = {  "S3989C4", // class name
  bases_S3989C4, 1,
  &(vtc_S3989C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3989C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3989C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3989C2  : S4055C3_nt , S3989C4 {
  void *s3989c2f0[5];
  int s3989c2f1[2];
  ::S14975C17_nt s3989c2f2;
  void *s3989c2f3;
  int s3989c2f4;
  void *s3989c2f5;
  int s3989c2f6[2];
  void *s3989c2f7;
  int s3989c2f8[2];
  virtual  ~S3989C2(); // _ZN7S3989C2D1Ev
  virtual void  v6(); // _ZN7S3989C22v6Ev
  virtual void  v7(); // _ZN7S3989C22v7Ev
  virtual void  v8(); // _ZN7S3989C22v8Ev
  virtual void  v9(); // _ZN7S3989C22v9Ev
  virtual void  v10(); // _ZN7S3989C23v10Ev
  virtual void  v11(); // _ZN7S3989C23v11Ev
  virtual void  v12(); // _ZN7S3989C23v12Ev
  virtual void  v13(); // _ZN7S3989C23v13Ev
  virtual void  v14(); // _ZN7S3989C23v14Ev
  virtual void  v15(); // _ZN7S3989C23v15Ev
  virtual void  v16(); // _ZN7S3989C23v16Ev
  virtual void  v17(); // _ZN7S3989C23v17Ev
  S3989C2(); // tgen
};
//SIG(-1 S3989C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3989C2 ::~S3989C2(){ note_dtor("S3989C2", this);}
void  S3989C2 ::v6(){vfunc_called(this, "_ZN7S3989C22v6Ev");}
void  S3989C2 ::v7(){vfunc_called(this, "_ZN7S3989C22v7Ev");}
void  S3989C2 ::v8(){vfunc_called(this, "_ZN7S3989C22v8Ev");}
void  S3989C2 ::v9(){vfunc_called(this, "_ZN7S3989C22v9Ev");}
void  S3989C2 ::v10(){vfunc_called(this, "_ZN7S3989C23v10Ev");}
void  S3989C2 ::v11(){vfunc_called(this, "_ZN7S3989C23v11Ev");}
void  S3989C2 ::v12(){vfunc_called(this, "_ZN7S3989C23v12Ev");}
void  S3989C2 ::v13(){vfunc_called(this, "_ZN7S3989C23v13Ev");}
void  S3989C2 ::v14(){vfunc_called(this, "_ZN7S3989C23v14Ev");}
void  S3989C2 ::v15(){vfunc_called(this, "_ZN7S3989C23v15Ev");}
void  S3989C2 ::v16(){vfunc_called(this, "_ZN7S3989C23v16Ev");}
void  S3989C2 ::v17(){vfunc_called(this, "_ZN7S3989C23v17Ev");}
S3989C2 ::S3989C2(){ note_ctor("S3989C2", this);} // tgen

static void Test_S3989C2()
{
  extern Class_Descriptor cd_S3989C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3989C2, buf);
    S3989C2 *dp, &lv = *(dp=new (buf) S3989C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3989C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3989C2)");
    /*is_ambiguous_... S3989C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3989C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3989C4*), ABISELECT(8,4), "S3989C2");
    check_base_class_offset(lv, (S3989C4*), ABISELECT(8,4), "S3989C2");
    check_field_offset(lv, s3989c2f0, ABISELECT(16,8), "S3989C2.s3989c2f0");
    check_field_offset(lv, s3989c2f1, ABISELECT(56,28), "S3989C2.s3989c2f1");
    check_field_offset(lv, s3989c2f2, ABISELECT(64,36), "S3989C2.s3989c2f2");
    check_field_offset(lv, s3989c2f3, ABISELECT(72,40), "S3989C2.s3989c2f3");
    check_field_offset(lv, s3989c2f4, ABISELECT(80,44), "S3989C2.s3989c2f4");
    check_field_offset(lv, s3989c2f5, ABISELECT(88,48), "S3989C2.s3989c2f5");
    check_field_offset(lv, s3989c2f6, ABISELECT(96,52), "S3989C2.s3989c2f6");
    check_field_offset(lv, s3989c2f7, ABISELECT(104,60), "S3989C2.s3989c2f7");
    check_field_offset(lv, s3989c2f8, ABISELECT(112,64), "S3989C2.s3989c2f8");
    test_class_info(&lv, &cd_S3989C2);
    dp->~S3989C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3989C2(Test_S3989C2, "S3989C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3989C2C1Ev();
extern void _ZN7S3989C2D1Ev();
Name_Map name_map_S3989C2[] = {
  NSPAIR(_ZN7S3989C2C1Ev),
  NSPAIR(_ZN7S3989C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3989C4;
extern VTBL_ENTRY _ZTI7S3989C4[];
extern  VTBL_ENTRY _ZTV7S3989C4[];
static Base_Class bases_S3989C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3989C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3989C2[];
extern void _ZN7S3989C2D1Ev();
extern void _ZN7S3989C2D0Ev();
extern void _ZN7S3989C22v6Ev();
extern void _ZN7S3989C22v7Ev();
extern void _ZN7S3989C22v8Ev();
extern void _ZN7S3989C22v9Ev();
extern void _ZN7S3989C23v10Ev();
extern void _ZN7S3989C23v11Ev();
extern void _ZN7S3989C23v12Ev();
extern void _ZN7S3989C23v13Ev();
extern void _ZN7S3989C23v14Ev();
extern void _ZN7S3989C23v15Ev();
extern void _ZN7S3989C23v16Ev();
extern void _ZN7S3989C23v17Ev();
extern void ABISELECT(_ZThn8_N7S3989C2D1Ev,_ZThn4_N7S3989C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3989C2D0Ev,_ZThn4_N7S3989C2D0Ev)();
extern void _ZN7S3989C42v5Ev();
static  VTBL_ENTRY vtc_S3989C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3989C2[0]),
  (VTBL_ENTRY)&_ZN7S3989C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3989C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3989C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3989C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3989C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3989C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v17Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3989C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3989C2D1Ev,_ZThn4_N7S3989C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3989C2D0Ev,_ZThn4_N7S3989C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3989C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3989C2[];
extern  VTBL_ENTRY _ZTV7S3989C2[];
Class_Descriptor cd_S3989C2 = {  "S3989C2", // class name
  bases_S3989C2, 3,
  &(vtc_S3989C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3989C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3989C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3989C1  : S3989C2 {
  void *s3989c1f0[2];
  virtual  ~S3989C1(); // _ZN7S3989C1D1Ev
  virtual void  v1(); // _ZN7S3989C12v1Ev
  virtual void  v2(); // _ZN7S3989C12v2Ev
  virtual void  v3(); // _ZN7S3989C12v3Ev
  virtual void  v4(); // _ZN7S3989C12v4Ev
  S3989C1(); // tgen
};
//SIG(1 S3989C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v5} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} vd v1 v2 v3 v4 Fp[2]}


 S3989C1 ::~S3989C1(){ note_dtor("S3989C1", this);}
void  S3989C1 ::v1(){vfunc_called(this, "_ZN7S3989C12v1Ev");}
void  S3989C1 ::v2(){vfunc_called(this, "_ZN7S3989C12v2Ev");}
void  S3989C1 ::v3(){vfunc_called(this, "_ZN7S3989C12v3Ev");}
void  S3989C1 ::v4(){vfunc_called(this, "_ZN7S3989C12v4Ev");}
S3989C1 ::S3989C1(){ note_ctor("S3989C1", this);} // tgen

static void Test_S3989C1()
{
  extern Class_Descriptor cd_S3989C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S3989C1, buf);
    S3989C1 *dp, &lv = *(dp=new (buf) S3989C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S3989C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3989C1)");
    /*is_ambiguous_... S3989C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3989C2*), 0, "S3989C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3989C4*)(S3989C2*), ABISELECT(8,4), "S3989C1");
    check_base_class_offset(lv, (S3989C4*)(S3989C2*), ABISELECT(8,4), "S3989C1");
    check_base_class_offset(lv, (S3989C2*), 0, "S3989C1");
    check_field_offset(lv, s3989c1f0, ABISELECT(120,72), "S3989C1.s3989c1f0");
    test_class_info(&lv, &cd_S3989C1);
    dp->~S3989C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3989C1(Test_S3989C1, "S3989C1", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S3989C1C1Ev();
extern void _ZN7S3989C1D1Ev();
Name_Map name_map_S3989C1[] = {
  NSPAIR(_ZN7S3989C1C1Ev),
  NSPAIR(_ZN7S3989C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3989C4;
extern VTBL_ENTRY _ZTI7S3989C4[];
extern  VTBL_ENTRY _ZTV7S3989C4[];
extern Class_Descriptor cd_S3989C2;
extern VTBL_ENTRY _ZTI7S3989C2[];
extern  VTBL_ENTRY _ZTV7S3989C2[];
static Base_Class bases_S3989C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3989C4,    ABISELECT(8,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3989C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3989C1[];
extern void _ZN7S3989C1D1Ev();
extern void _ZN7S3989C1D0Ev();
extern void _ZN7S3989C22v6Ev();
extern void _ZN7S3989C22v7Ev();
extern void _ZN7S3989C22v8Ev();
extern void _ZN7S3989C22v9Ev();
extern void _ZN7S3989C23v10Ev();
extern void _ZN7S3989C23v11Ev();
extern void _ZN7S3989C23v12Ev();
extern void _ZN7S3989C23v13Ev();
extern void _ZN7S3989C23v14Ev();
extern void _ZN7S3989C23v15Ev();
extern void _ZN7S3989C23v16Ev();
extern void _ZN7S3989C23v17Ev();
extern void _ZN7S3989C12v1Ev();
extern void _ZN7S3989C12v2Ev();
extern void _ZN7S3989C12v3Ev();
extern void _ZN7S3989C12v4Ev();
extern void ABISELECT(_ZThn8_N7S3989C1D1Ev,_ZThn4_N7S3989C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3989C1D0Ev,_ZThn4_N7S3989C1D0Ev)();
extern void _ZN7S3989C42v5Ev();
static  VTBL_ENTRY vtc_S3989C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3989C1[0]),
  (VTBL_ENTRY)&_ZN7S3989C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3989C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3989C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3989C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3989C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3989C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3989C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3989C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3989C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3989C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3989C12v4Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3989C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3989C1D1Ev,_ZThn4_N7S3989C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3989C1D0Ev,_ZThn4_N7S3989C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3989C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3989C1[];
extern  VTBL_ENTRY _ZTV7S3989C1[];
Class_Descriptor cd_S3989C1 = {  "S3989C1", // class name
  bases_S3989C1, 4,
  &(vtc_S3989C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S3989C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3989C1),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3988C4  : S4055C3_nt {
  virtual  ~S3988C4(); // _ZN7S3988C4D1Ev
  virtual void  v5(); // _ZN7S3988C42v5Ev
  S3988C4(); // tgen
};
//SIG(-1 S3988C4) C1{ BC2{ vd m} vd v1}


 S3988C4 ::~S3988C4(){ note_dtor("S3988C4", this);}
void  S3988C4 ::v5(){vfunc_called(this, "_ZN7S3988C42v5Ev");}
S3988C4 ::S3988C4(){ note_ctor("S3988C4", this);} // tgen

static void Test_S3988C4()
{
  extern Class_Descriptor cd_S3988C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3988C4, buf);
    S3988C4 *dp, &lv = *(dp=new (buf) S3988C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3988C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3988C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3988C4");
    test_class_info(&lv, &cd_S3988C4);
    dp->~S3988C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3988C4(Test_S3988C4, "S3988C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3988C4C1Ev();
extern void _ZN7S3988C4D1Ev();
Name_Map name_map_S3988C4[] = {
  NSPAIR(_ZN7S3988C4C1Ev),
  NSPAIR(_ZN7S3988C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3988C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3988C4[];
extern void _ZN7S3988C4D1Ev();
extern void _ZN7S3988C4D0Ev();
extern void _ZN7S3988C42v5Ev();
static  VTBL_ENTRY vtc_S3988C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3988C4[0]),
  (VTBL_ENTRY)&_ZN7S3988C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3988C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3988C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3988C4[];
extern  VTBL_ENTRY _ZTV7S3988C4[];
Class_Descriptor cd_S3988C4 = {  "S3988C4", // class name
  bases_S3988C4, 1,
  &(vtc_S3988C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3988C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3988C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3988C2  : S4055C3_nt , S3988C4 {
  void *s3988c2f0[5];
  int s3988c2f1[2];
  ::S14975C17_nt s3988c2f2;
  void *s3988c2f3;
  int s3988c2f4;
  void *s3988c2f5;
  int s3988c2f6[2];
  void *s3988c2f7;
  int s3988c2f8[2];
  virtual  ~S3988C2(); // _ZN7S3988C2D1Ev
  virtual void  v6(); // _ZN7S3988C22v6Ev
  virtual void  v7(); // _ZN7S3988C22v7Ev
  virtual void  v8(); // _ZN7S3988C22v8Ev
  virtual void  v9(); // _ZN7S3988C22v9Ev
  virtual void  v10(); // _ZN7S3988C23v10Ev
  virtual void  v11(); // _ZN7S3988C23v11Ev
  virtual void  v12(); // _ZN7S3988C23v12Ev
  virtual void  v13(); // _ZN7S3988C23v13Ev
  virtual void  v14(); // _ZN7S3988C23v14Ev
  virtual void  v15(); // _ZN7S3988C23v15Ev
  virtual void  v16(); // _ZN7S3988C23v16Ev
  virtual void  v17(); // _ZN7S3988C23v17Ev
  S3988C2(); // tgen
};
//SIG(-1 S3988C2) C1{ BC2{ vd m} BC3{ BC2 vd v13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 Fp[5] Fi[2] FC4{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]}


 S3988C2 ::~S3988C2(){ note_dtor("S3988C2", this);}
void  S3988C2 ::v6(){vfunc_called(this, "_ZN7S3988C22v6Ev");}
void  S3988C2 ::v7(){vfunc_called(this, "_ZN7S3988C22v7Ev");}
void  S3988C2 ::v8(){vfunc_called(this, "_ZN7S3988C22v8Ev");}
void  S3988C2 ::v9(){vfunc_called(this, "_ZN7S3988C22v9Ev");}
void  S3988C2 ::v10(){vfunc_called(this, "_ZN7S3988C23v10Ev");}
void  S3988C2 ::v11(){vfunc_called(this, "_ZN7S3988C23v11Ev");}
void  S3988C2 ::v12(){vfunc_called(this, "_ZN7S3988C23v12Ev");}
void  S3988C2 ::v13(){vfunc_called(this, "_ZN7S3988C23v13Ev");}
void  S3988C2 ::v14(){vfunc_called(this, "_ZN7S3988C23v14Ev");}
void  S3988C2 ::v15(){vfunc_called(this, "_ZN7S3988C23v15Ev");}
void  S3988C2 ::v16(){vfunc_called(this, "_ZN7S3988C23v16Ev");}
void  S3988C2 ::v17(){vfunc_called(this, "_ZN7S3988C23v17Ev");}
S3988C2 ::S3988C2(){ note_ctor("S3988C2", this);} // tgen

static void Test_S3988C2()
{
  extern Class_Descriptor cd_S3988C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,19)];
    init_test(&cd_S3988C2, buf);
    S3988C2 *dp, &lv = *(dp=new (buf) S3988C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,72), "sizeof(S3988C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3988C2)");
    /*is_ambiguous_... S3988C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3988C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3988C4*), ABISELECT(8,4), "S3988C2");
    check_base_class_offset(lv, (S3988C4*), ABISELECT(8,4), "S3988C2");
    check_field_offset(lv, s3988c2f0, ABISELECT(16,8), "S3988C2.s3988c2f0");
    check_field_offset(lv, s3988c2f1, ABISELECT(56,28), "S3988C2.s3988c2f1");
    check_field_offset(lv, s3988c2f2, ABISELECT(64,36), "S3988C2.s3988c2f2");
    check_field_offset(lv, s3988c2f3, ABISELECT(72,40), "S3988C2.s3988c2f3");
    check_field_offset(lv, s3988c2f4, ABISELECT(80,44), "S3988C2.s3988c2f4");
    check_field_offset(lv, s3988c2f5, ABISELECT(88,48), "S3988C2.s3988c2f5");
    check_field_offset(lv, s3988c2f6, ABISELECT(96,52), "S3988C2.s3988c2f6");
    check_field_offset(lv, s3988c2f7, ABISELECT(104,60), "S3988C2.s3988c2f7");
    check_field_offset(lv, s3988c2f8, ABISELECT(112,64), "S3988C2.s3988c2f8");
    test_class_info(&lv, &cd_S3988C2);
    dp->~S3988C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3988C2(Test_S3988C2, "S3988C2", ABISELECT(120,72));

#else // __cplusplus

extern void _ZN7S3988C2C1Ev();
extern void _ZN7S3988C2D1Ev();
Name_Map name_map_S3988C2[] = {
  NSPAIR(_ZN7S3988C2C1Ev),
  NSPAIR(_ZN7S3988C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3988C4;
extern VTBL_ENTRY _ZTI7S3988C4[];
extern  VTBL_ENTRY _ZTV7S3988C4[];
static Base_Class bases_S3988C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3988C4,    ABISELECT(8,4), //bcp->offset
    16, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3988C2[];
extern void _ZN7S3988C2D1Ev();
extern void _ZN7S3988C2D0Ev();
extern void _ZN7S3988C22v6Ev();
extern void _ZN7S3988C22v7Ev();
extern void _ZN7S3988C22v8Ev();
extern void _ZN7S3988C22v9Ev();
extern void _ZN7S3988C23v10Ev();
extern void _ZN7S3988C23v11Ev();
extern void _ZN7S3988C23v12Ev();
extern void _ZN7S3988C23v13Ev();
extern void _ZN7S3988C23v14Ev();
extern void _ZN7S3988C23v15Ev();
extern void _ZN7S3988C23v16Ev();
extern void _ZN7S3988C23v17Ev();
extern void ABISELECT(_ZThn8_N7S3988C2D1Ev,_ZThn4_N7S3988C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3988C2D0Ev,_ZThn4_N7S3988C2D0Ev)();
extern void _ZN7S3988C42v5Ev();
static  VTBL_ENTRY vtc_S3988C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3988C2[0]),
  (VTBL_ENTRY)&_ZN7S3988C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3988C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3988C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3988C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3988C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3988C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v17Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3988C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3988C2D1Ev,_ZThn4_N7S3988C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3988C2D0Ev,_ZThn4_N7S3988C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3988C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3988C2[];
extern  VTBL_ENTRY _ZTV7S3988C2[];
Class_Descriptor cd_S3988C2 = {  "S3988C2", // class name
  bases_S3988C2, 3,
  &(vtc_S3988C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,72), // object size
  NSPAIRA(_ZTI7S3988C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3988C2),21, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3988C1  : S3988C2 {
  void *s3988c1f0;
  int s3988c1f1;
  virtual  ~S3988C1(); // _ZN7S3988C1D1Ev
  virtual void  v1(); // _ZN7S3988C12v1Ev
  virtual void  v2(); // _ZN7S3988C12v2Ev
  virtual void  v3(); // _ZN7S3988C12v3Ev
  virtual void  v4(); // _ZN7S3988C12v4Ev
  S3988C1(); // tgen
};
//SIG(1 S3988C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v5} vd v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 Fp[5] Fi[2] FC5{ Fi} Fp Fi Fp Fi[2] Fp Fi[2]} vd v1 v2 v3 v4 Fp Fi}


 S3988C1 ::~S3988C1(){ note_dtor("S3988C1", this);}
void  S3988C1 ::v1(){vfunc_called(this, "_ZN7S3988C12v1Ev");}
void  S3988C1 ::v2(){vfunc_called(this, "_ZN7S3988C12v2Ev");}
void  S3988C1 ::v3(){vfunc_called(this, "_ZN7S3988C12v3Ev");}
void  S3988C1 ::v4(){vfunc_called(this, "_ZN7S3988C12v4Ev");}
S3988C1 ::S3988C1(){ note_ctor("S3988C1", this);} // tgen

static void Test_S3988C1()
{
  extern Class_Descriptor cd_S3988C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,21)];
    init_test(&cd_S3988C1, buf);
    S3988C1 *dp, &lv = *(dp=new (buf) S3988C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,80), "sizeof(S3988C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3988C1)");
    /*is_ambiguous_... S3988C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3988C2*), 0, "S3988C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3988C4*)(S3988C2*), ABISELECT(8,4), "S3988C1");
    check_base_class_offset(lv, (S3988C4*)(S3988C2*), ABISELECT(8,4), "S3988C1");
    check_base_class_offset(lv, (S3988C2*), 0, "S3988C1");
    check_field_offset(lv, s3988c1f0, ABISELECT(120,72), "S3988C1.s3988c1f0");
    check_field_offset(lv, s3988c1f1, ABISELECT(128,76), "S3988C1.s3988c1f1");
    test_class_info(&lv, &cd_S3988C1);
    dp->~S3988C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3988C1(Test_S3988C1, "S3988C1", ABISELECT(136,80));

#else // __cplusplus

extern void _ZN7S3988C1C1Ev();
extern void _ZN7S3988C1D1Ev();
Name_Map name_map_S3988C1[] = {
  NSPAIR(_ZN7S3988C1C1Ev),
  NSPAIR(_ZN7S3988C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3988C4;
extern VTBL_ENTRY _ZTI7S3988C4[];
extern  VTBL_ENTRY _ZTV7S3988C4[];
extern Class_Descriptor cd_S3988C2;
extern VTBL_ENTRY _ZTI7S3988C2[];
extern  VTBL_ENTRY _ZTV7S3988C2[];
static Base_Class bases_S3988C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3988C4,    ABISELECT(8,4), //bcp->offset
    20, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3988C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3988C1[];
extern void _ZN7S3988C1D1Ev();
extern void _ZN7S3988C1D0Ev();
extern void _ZN7S3988C22v6Ev();
extern void _ZN7S3988C22v7Ev();
extern void _ZN7S3988C22v8Ev();
extern void _ZN7S3988C22v9Ev();
extern void _ZN7S3988C23v10Ev();
extern void _ZN7S3988C23v11Ev();
extern void _ZN7S3988C23v12Ev();
extern void _ZN7S3988C23v13Ev();
extern void _ZN7S3988C23v14Ev();
extern void _ZN7S3988C23v15Ev();
extern void _ZN7S3988C23v16Ev();
extern void _ZN7S3988C23v17Ev();
extern void _ZN7S3988C12v1Ev();
extern void _ZN7S3988C12v2Ev();
extern void _ZN7S3988C12v3Ev();
extern void _ZN7S3988C12v4Ev();
extern void ABISELECT(_ZThn8_N7S3988C1D1Ev,_ZThn4_N7S3988C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3988C1D0Ev,_ZThn4_N7S3988C1D0Ev)();
extern void _ZN7S3988C42v5Ev();
static  VTBL_ENTRY vtc_S3988C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3988C1[0]),
  (VTBL_ENTRY)&_ZN7S3988C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3988C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3988C22v6Ev,
  (VTBL_ENTRY)&_ZN7S3988C22v7Ev,
  (VTBL_ENTRY)&_ZN7S3988C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3988C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3988C23v17Ev,
  (VTBL_ENTRY)&_ZN7S3988C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3988C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3988C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3988C12v4Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3988C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3988C1D1Ev,_ZThn4_N7S3988C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3988C1D0Ev,_ZThn4_N7S3988C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3988C42v5Ev,
};
extern VTBL_ENTRY _ZTI7S3988C1[];
extern  VTBL_ENTRY _ZTV7S3988C1[];
Class_Descriptor cd_S3988C1 = {  "S3988C1", // class name
  bases_S3988C1, 4,
  &(vtc_S3988C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,80), // object size
  NSPAIRA(_ZTI7S3988C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3988C1),25, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9291C2  {
  ::S21714C10_nt s9291c2f0;
  int s9291c2f1[2];
  char s9291c2f2;
  virtual  ~S9291C2(); // _ZN7S9291C2D1Ev
  virtual void  v3(); // _ZN7S9291C22v3Ev
  virtual void  v4(); // _ZN7S9291C22v4Ev
  virtual void  v5(); // _ZN7S9291C22v5Ev
  S9291C2(); // tgen
};
//SIG(-1 S9291C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9291C2 ::~S9291C2(){ note_dtor("S9291C2", this);}
void  S9291C2 ::v3(){vfunc_called(this, "_ZN7S9291C22v3Ev");}
void  S9291C2 ::v4(){vfunc_called(this, "_ZN7S9291C22v4Ev");}
void  S9291C2 ::v5(){vfunc_called(this, "_ZN7S9291C22v5Ev");}
S9291C2 ::S9291C2(){ note_ctor("S9291C2", this);} // tgen

static void Test_S9291C2()
{
  extern Class_Descriptor cd_S9291C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9291C2, buf);
    S9291C2 *dp, &lv = *(dp=new (buf) S9291C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9291C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9291C2)");
    check_field_offset(lv, s9291c2f0, ABISELECT(8,4), "S9291C2.s9291c2f0");
    check_field_offset(lv, s9291c2f1, ABISELECT(24,16), "S9291C2.s9291c2f1");
    check_field_offset(lv, s9291c2f2, ABISELECT(32,24), "S9291C2.s9291c2f2");
    test_class_info(&lv, &cd_S9291C2);
    dp->~S9291C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9291C2(Test_S9291C2, "S9291C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9291C2C1Ev();
extern void _ZN7S9291C2D1Ev();
Name_Map name_map_S9291C2[] = {
  NSPAIR(_ZN7S9291C2C1Ev),
  NSPAIR(_ZN7S9291C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9291C2[];
extern void _ZN7S9291C2D1Ev();
extern void _ZN7S9291C2D0Ev();
extern void _ZN7S9291C22v3Ev();
extern void _ZN7S9291C22v4Ev();
extern void _ZN7S9291C22v5Ev();
static  VTBL_ENTRY vtc_S9291C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9291C2[0]),
  (VTBL_ENTRY)&_ZN7S9291C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9291C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9291C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9291C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9291C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9291C2[];
extern  VTBL_ENTRY _ZTV7S9291C2[];
Class_Descriptor cd_S9291C2 = {  "S9291C2", // class name
  0,0,//no base classes
  &(vtc_S9291C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9291C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9291C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9291C1  : S9291C2 {
  ::S9538C4 s9291c1f0;
  char s9291c1f1;
  int s9291c1f2;
  ::S21714C10_nt s9291c1f3;
  virtual  ~S9291C1(); // _ZN7S9291C1D1Ev
  virtual void  v1(); // _ZN7S9291C12v1Ev
  virtual void  v2(); // _ZN7S9291C12v2Ev
  S9291C1(); // tgen
};
//SIG(1 S9291C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 FC5{ m FC6{ m Fp Fi FC7{ m}} Fi FL Fi[2] FL[2] Fc[2] FC6 FC6 FC6 FC6 Fi[3] FC6 FC6 FC6 Fi FC6} Fc Fi FC3}


 S9291C1 ::~S9291C1(){ note_dtor("S9291C1", this);}
void  S9291C1 ::v1(){vfunc_called(this, "_ZN7S9291C12v1Ev");}
void  S9291C1 ::v2(){vfunc_called(this, "_ZN7S9291C12v2Ev");}
S9291C1 ::S9291C1(){ note_ctor("S9291C1", this);} // tgen

static void Test_S9291C1()
{
  extern Class_Descriptor cd_S9291C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,54)];
    init_test(&cd_S9291C1, buf);
    S9291C1 *dp, &lv = *(dp=new (buf) S9291C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,212), "sizeof(S9291C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9291C1)");
    check_base_class_offset(lv, (S9291C2*), 0, "S9291C1");
    check_field_offset(lv, s9291c1f0, ABISELECT(40,28), "S9291C1.s9291c1f0");
    check_field_offset(lv, s9291c1f1, ABISELECT(256,192), "S9291C1.s9291c1f1");
    check_field_offset(lv, s9291c1f2, ABISELECT(260,196), "S9291C1.s9291c1f2");
    check_field_offset(lv, s9291c1f3, ABISELECT(264,200), "S9291C1.s9291c1f3");
    test_class_info(&lv, &cd_S9291C1);
    dp->~S9291C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9291C1(Test_S9291C1, "S9291C1", ABISELECT(280,212));

#else // __cplusplus

extern void _ZN7S9291C1C1Ev();
extern void _ZN7S9291C1D1Ev();
Name_Map name_map_S9291C1[] = {
  NSPAIR(_ZN7S9291C1C1Ev),
  NSPAIR(_ZN7S9291C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9291C2;
extern VTBL_ENTRY _ZTI7S9291C2[];
extern  VTBL_ENTRY _ZTV7S9291C2[];
static Base_Class bases_S9291C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9291C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9291C1[];
extern void _ZN7S9291C1D1Ev();
extern void _ZN7S9291C1D0Ev();
extern void _ZN7S9291C22v3Ev();
extern void _ZN7S9291C22v4Ev();
extern void _ZN7S9291C22v5Ev();
extern void _ZN7S9291C12v1Ev();
extern void _ZN7S9291C12v2Ev();
static  VTBL_ENTRY vtc_S9291C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9291C1[0]),
  (VTBL_ENTRY)&_ZN7S9291C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9291C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9291C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9291C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9291C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9291C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9291C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9291C1[];
extern  VTBL_ENTRY _ZTV7S9291C1[];
Class_Descriptor cd_S9291C1 = {  "S9291C1", // class name
  bases_S9291C1, 1,
  &(vtc_S9291C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(280,212), // object size
  NSPAIRA(_ZTI7S9291C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9291C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3817C3_nt  {
  int s3817c3f0;
  void  mf3817c3(); // _ZN10S3817C3_nt8mf3817c3Ev
  virtual  ~S3817C3_nt(); // _ZN10S3817C3_ntD1Ev
  S3817C3_nt(); // tgen
};
//SIG(-1 S3817C3_nt) C1{ vd m Fi}


void  S3817C3_nt ::mf3817c3(){}
 S3817C3_nt ::~S3817C3_nt(){ note_dtor("S3817C3_nt", this);}
S3817C3_nt ::S3817C3_nt(){ note_ctor("S3817C3_nt", this);} // tgen

//skip512 S3817C3_nt

#else // __cplusplus

extern void _ZN10S3817C3_ntC1Ev();
extern void _ZN10S3817C3_ntD1Ev();
Name_Map name_map_S3817C3_nt[] = {
  NSPAIR(_ZN10S3817C3_ntC1Ev),
  NSPAIR(_ZN10S3817C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3817C3_nt[];
extern void _ZN10S3817C3_ntD1Ev();
extern void _ZN10S3817C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3817C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3817C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3817C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3817C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3817C3_nt[];
VTBL_ENTRY *P__ZTI10S3817C3_nt = _ZTI10S3817C3_nt; 
extern  VTBL_ENTRY _ZTV10S3817C3_nt[];
Class_Descriptor cd_S3817C3_nt = {  "S3817C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3817C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S3817C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3817C3_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3817C2  : S3817C3_nt {
  __tsi64 s3817c2f0;
  virtual  ~S3817C2(); // _ZN7S3817C2D1Ev
  virtual void  v2(); // _ZN7S3817C22v2Ev
  S3817C2(); // tgen
};
//SIG(-1 S3817C2) C1{ BC2{ vd m Fi} vd v1 FL}


 S3817C2 ::~S3817C2(){ note_dtor("S3817C2", this);}
void  S3817C2 ::v2(){vfunc_called(this, "_ZN7S3817C22v2Ev");}
S3817C2 ::S3817C2(){ note_ctor("S3817C2", this);} // tgen

static void Test_S3817C2()
{
  extern Class_Descriptor cd_S3817C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3817C2, buf);
    S3817C2 *dp, &lv = *(dp=new (buf) S3817C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3817C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3817C2)");
    check_base_class_offset(lv, (S3817C3_nt*), 0, "S3817C2");
    check_field_offset(lv, s3817c2f0, ABISELECT(16,8), "S3817C2.s3817c2f0");
    test_class_info(&lv, &cd_S3817C2);
    dp->~S3817C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3817C2(Test_S3817C2, "S3817C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3817C2C1Ev();
extern void _ZN7S3817C2D1Ev();
Name_Map name_map_S3817C2[] = {
  NSPAIR(_ZN7S3817C2C1Ev),
  NSPAIR(_ZN7S3817C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3817C3_nt;
extern VTBL_ENTRY _ZTI10S3817C3_nt[];
extern  VTBL_ENTRY _ZTV10S3817C3_nt[];
static Base_Class bases_S3817C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3817C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3817C2[];
extern void _ZN7S3817C2D1Ev();
extern void _ZN7S3817C2D0Ev();
extern void _ZN7S3817C22v2Ev();
static  VTBL_ENTRY vtc_S3817C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3817C2[0]),
  (VTBL_ENTRY)&_ZN7S3817C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3817C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3817C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S3817C2[];
extern  VTBL_ENTRY _ZTV7S3817C2[];
Class_Descriptor cd_S3817C2 = {  "S3817C2", // class name
  bases_S3817C2, 1,
  &(vtc_S3817C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3817C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3817C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3817C1  : S3817C2 {
  ::S9538C4 s3817c1f0;
  virtual void  v1(); // _ZN7S3817C12v1Ev
  ~S3817C1(); // tgen
  S3817C1(); // tgen
};
//SIG(1 S3817C1) C1{ BC2{ BC3{ vd m Fi} vd v2 FL} v1 FC4{ m FC5{ m Fp Fi FC6{ m}} Fi FL Fi[2] FL[2] Fc[2] FC5 FC5 FC5 FC5 Fi[3] FC5 FC5 FC5 Fi FC5}}


void  S3817C1 ::v1(){vfunc_called(this, "_ZN7S3817C12v1Ev");}
S3817C1 ::~S3817C1(){ note_dtor("S3817C1", this);} // tgen
S3817C1 ::S3817C1(){ note_ctor("S3817C1", this);} // tgen

static void Test_S3817C1()
{
  extern Class_Descriptor cd_S3817C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,46)];
    init_test(&cd_S3817C1, buf);
    S3817C1 *dp, &lv = *(dp=new (buf) S3817C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,180), "sizeof(S3817C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3817C1)");
    check_base_class_offset(lv, (S3817C3_nt*)(S3817C2*), 0, "S3817C1");
    check_base_class_offset(lv, (S3817C2*), 0, "S3817C1");
    check_field_offset(lv, s3817c1f0, ABISELECT(24,16), "S3817C1.s3817c1f0");
    test_class_info(&lv, &cd_S3817C1);
    dp->~S3817C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3817C1(Test_S3817C1, "S3817C1", ABISELECT(240,180));

#else // __cplusplus

extern void _ZN7S3817C1C1Ev();
extern void _ZN7S3817C1D1Ev();
Name_Map name_map_S3817C1[] = {
  NSPAIR(_ZN7S3817C1C1Ev),
  NSPAIR(_ZN7S3817C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3817C3_nt;
extern VTBL_ENTRY _ZTI10S3817C3_nt[];
extern  VTBL_ENTRY _ZTV10S3817C3_nt[];
extern Class_Descriptor cd_S3817C2;
extern VTBL_ENTRY _ZTI7S3817C2[];
extern  VTBL_ENTRY _ZTV7S3817C2[];
static Base_Class bases_S3817C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3817C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3817C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3817C1[];
extern void _ZN7S3817C1D1Ev();
extern void _ZN7S3817C1D0Ev();
extern void _ZN7S3817C22v2Ev();
extern void _ZN7S3817C12v1Ev();
static  VTBL_ENTRY vtc_S3817C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3817C1[0]),
  (VTBL_ENTRY)&_ZN7S3817C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3817C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3817C22v2Ev,
  (VTBL_ENTRY)&_ZN7S3817C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3817C1[];
extern  VTBL_ENTRY _ZTV7S3817C1[];
Class_Descriptor cd_S3817C1 = {  "S3817C1", // class name
  bases_S3817C1, 2,
  &(vtc_S3817C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(240,180), // object size
  NSPAIRA(_ZTI7S3817C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3817C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3999C4  : S4055C3_nt {
  virtual  ~S3999C4(); // _ZN7S3999C4D1Ev
  virtual void  v9(); // _ZN7S3999C42v9Ev
  S3999C4(); // tgen
};
//SIG(-1 S3999C4) C1{ BC2{ vd m} vd v1}


 S3999C4 ::~S3999C4(){ note_dtor("S3999C4", this);}
void  S3999C4 ::v9(){vfunc_called(this, "_ZN7S3999C42v9Ev");}
S3999C4 ::S3999C4(){ note_ctor("S3999C4", this);} // tgen

static void Test_S3999C4()
{
  extern Class_Descriptor cd_S3999C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3999C4, buf);
    S3999C4 *dp, &lv = *(dp=new (buf) S3999C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3999C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3999C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3999C4");
    test_class_info(&lv, &cd_S3999C4);
    dp->~S3999C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3999C4(Test_S3999C4, "S3999C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3999C4C1Ev();
extern void _ZN7S3999C4D1Ev();
Name_Map name_map_S3999C4[] = {
  NSPAIR(_ZN7S3999C4C1Ev),
  NSPAIR(_ZN7S3999C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3999C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3999C4[];
extern void _ZN7S3999C4D1Ev();
extern void _ZN7S3999C4D0Ev();
extern void _ZN7S3999C42v9Ev();
static  VTBL_ENTRY vtc_S3999C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3999C4[0]),
  (VTBL_ENTRY)&_ZN7S3999C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3999C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3999C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S3999C4[];
extern  VTBL_ENTRY _ZTV7S3999C4[];
Class_Descriptor cd_S3999C4 = {  "S3999C4", // class name
  bases_S3999C4, 1,
  &(vtc_S3999C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3999C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3999C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3999C5  : S4055C3_nt {
  virtual  ~S3999C5(); // _ZN7S3999C5D1Ev
  virtual void  v10(); // _ZN7S3999C53v10Ev
  S3999C5(); // tgen
};
//SIG(-1 S3999C5) C1{ BC2{ vd m} vd v1}


 S3999C5 ::~S3999C5(){ note_dtor("S3999C5", this);}
void  S3999C5 ::v10(){vfunc_called(this, "_ZN7S3999C53v10Ev");}
S3999C5 ::S3999C5(){ note_ctor("S3999C5", this);} // tgen

static void Test_S3999C5()
{
  extern Class_Descriptor cd_S3999C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S3999C5, buf);
    S3999C5 *dp, &lv = *(dp=new (buf) S3999C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S3999C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3999C5)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S3999C5");
    test_class_info(&lv, &cd_S3999C5);
    dp->~S3999C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3999C5(Test_S3999C5, "S3999C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S3999C5C1Ev();
extern void _ZN7S3999C5D1Ev();
Name_Map name_map_S3999C5[] = {
  NSPAIR(_ZN7S3999C5C1Ev),
  NSPAIR(_ZN7S3999C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S3999C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3999C5[];
extern void _ZN7S3999C5D1Ev();
extern void _ZN7S3999C5D0Ev();
extern void _ZN7S3999C53v10Ev();
static  VTBL_ENTRY vtc_S3999C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3999C5[0]),
  (VTBL_ENTRY)&_ZN7S3999C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3999C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3999C53v10Ev,
};
extern VTBL_ENTRY _ZTI7S3999C5[];
extern  VTBL_ENTRY _ZTV7S3999C5[];
Class_Descriptor cd_S3999C5 = {  "S3999C5", // class name
  bases_S3999C5, 1,
  &(vtc_S3999C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S3999C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3999C5),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3999C2  : S4055C3_nt , S3999C4 , S3999C5 {
  virtual  ~S3999C2(); // _ZN7S3999C2D1Ev
  virtual void  v11(); // _ZN7S3999C23v11Ev
  virtual void  v12(); // _ZN7S3999C23v12Ev
  virtual void  v13(); // _ZN7S3999C23v13Ev
  virtual void  v14(); // _ZN7S3999C23v14Ev
  virtual void  v15(); // _ZN7S3999C23v15Ev
  virtual void  v16(); // _ZN7S3999C23v16Ev
  S3999C2(); // tgen
};
//SIG(-1 S3999C2) C1{ BC2{ vd m} BC3{ BC2 vd v7} BC4{ BC2 vd v8} vd v1 v2 v3 v4 v5 v6}


 S3999C2 ::~S3999C2(){ note_dtor("S3999C2", this);}
void  S3999C2 ::v11(){vfunc_called(this, "_ZN7S3999C23v11Ev");}
void  S3999C2 ::v12(){vfunc_called(this, "_ZN7S3999C23v12Ev");}
void  S3999C2 ::v13(){vfunc_called(this, "_ZN7S3999C23v13Ev");}
void  S3999C2 ::v14(){vfunc_called(this, "_ZN7S3999C23v14Ev");}
void  S3999C2 ::v15(){vfunc_called(this, "_ZN7S3999C23v15Ev");}
void  S3999C2 ::v16(){vfunc_called(this, "_ZN7S3999C23v16Ev");}
S3999C2 ::S3999C2(){ note_ctor("S3999C2", this);} // tgen

static void Test_S3999C2()
{
  extern Class_Descriptor cd_S3999C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S3999C2, buf);
    S3999C2 *dp, &lv = *(dp=new (buf) S3999C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S3999C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3999C2)");
    /*is_ambiguous_... S3999C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S3999C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3999C4*), ABISELECT(8,4), "S3999C2");
    check_base_class_offset(lv, (S3999C4*), ABISELECT(8,4), "S3999C2");
    check_base_class_offset(lv, (S4055C3_nt*)(S3999C5*), ABISELECT(16,8), "S3999C2");
    check_base_class_offset(lv, (S3999C5*), ABISELECT(16,8), "S3999C2");
    test_class_info(&lv, &cd_S3999C2);
    dp->~S3999C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3999C2(Test_S3999C2, "S3999C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S3999C2C1Ev();
extern void _ZN7S3999C2D1Ev();
Name_Map name_map_S3999C2[] = {
  NSPAIR(_ZN7S3999C2C1Ev),
  NSPAIR(_ZN7S3999C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3999C4;
extern VTBL_ENTRY _ZTI7S3999C4[];
extern  VTBL_ENTRY _ZTV7S3999C4[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3999C5;
extern VTBL_ENTRY _ZTI7S3999C5[];
extern  VTBL_ENTRY _ZTV7S3999C5[];
static Base_Class bases_S3999C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3999C4,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3999C5,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3999C2[];
extern void _ZN7S3999C2D1Ev();
extern void _ZN7S3999C2D0Ev();
extern void _ZN7S3999C23v11Ev();
extern void _ZN7S3999C23v12Ev();
extern void _ZN7S3999C23v13Ev();
extern void _ZN7S3999C23v14Ev();
extern void _ZN7S3999C23v15Ev();
extern void _ZN7S3999C23v16Ev();
extern void ABISELECT(_ZThn8_N7S3999C2D1Ev,_ZThn4_N7S3999C2D1Ev)();
extern void ABISELECT(_ZThn8_N7S3999C2D0Ev,_ZThn4_N7S3999C2D0Ev)();
extern void _ZN7S3999C42v9Ev();
extern void ABISELECT(_ZThn16_N7S3999C2D1Ev,_ZThn8_N7S3999C2D1Ev)();
extern void ABISELECT(_ZThn16_N7S3999C2D0Ev,_ZThn8_N7S3999C2D0Ev)();
extern void _ZN7S3999C53v10Ev();
static  VTBL_ENTRY vtc_S3999C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3999C2[0]),
  (VTBL_ENTRY)&_ZN7S3999C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3999C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3999C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3999C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3999C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3999C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3999C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3999C23v16Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3999C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3999C2D1Ev,_ZThn4_N7S3999C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3999C2D0Ev,_ZThn4_N7S3999C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3999C42v9Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3999C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3999C2D1Ev,_ZThn8_N7S3999C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3999C2D0Ev,_ZThn8_N7S3999C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3999C53v10Ev,
};
extern VTBL_ENTRY _ZTI7S3999C2[];
extern  VTBL_ENTRY _ZTV7S3999C2[];
Class_Descriptor cd_S3999C2 = {  "S3999C2", // class name
  bases_S3999C2, 5,
  &(vtc_S3999C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S3999C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S3999C2),20, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  5, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3999C1  : S3999C2 {
  char s3999c1f0;
  int s3999c1f1[3];
  void *s3999c1f2;
  int s3999c1f3[2];
  char s3999c1f4;
  virtual  ~S3999C1(); // _ZN7S3999C1D1Ev
  virtual void  v1(); // _ZN7S3999C12v1Ev
  virtual void  v2(); // _ZN7S3999C12v2Ev
  virtual void  v3(); // _ZN7S3999C12v3Ev
  virtual void  v4(); // _ZN7S3999C12v4Ev
  virtual void  v5(); // _ZN7S3999C12v5Ev
  virtual void  v6(); // _ZN7S3999C12v6Ev
  virtual void  v7(); // _ZN7S3999C12v7Ev
  virtual void  v8(); // _ZN7S3999C12v8Ev
  S3999C1(); // tgen
};
//SIG(1 S3999C1) C1{ BC2{ BC3{ vd m} BC4{ BC3 vd v9} BC5{ BC3 vd v10} vd v11 v12 v13 v14 v15 v16} vd v1 v2 v3 v4 v5 v6 v7 v8 Fc Fi[3] Fp Fi[2] Fc}


 S3999C1 ::~S3999C1(){ note_dtor("S3999C1", this);}
void  S3999C1 ::v1(){vfunc_called(this, "_ZN7S3999C12v1Ev");}
void  S3999C1 ::v2(){vfunc_called(this, "_ZN7S3999C12v2Ev");}
void  S3999C1 ::v3(){vfunc_called(this, "_ZN7S3999C12v3Ev");}
void  S3999C1 ::v4(){vfunc_called(this, "_ZN7S3999C12v4Ev");}
void  S3999C1 ::v5(){vfunc_called(this, "_ZN7S3999C12v5Ev");}
void  S3999C1 ::v6(){vfunc_called(this, "_ZN7S3999C12v6Ev");}
void  S3999C1 ::v7(){vfunc_called(this, "_ZN7S3999C12v7Ev");}
void  S3999C1 ::v8(){vfunc_called(this, "_ZN7S3999C12v8Ev");}
S3999C1 ::S3999C1(){ note_ctor("S3999C1", this);} // tgen

static void Test_S3999C1()
{
  extern Class_Descriptor cd_S3999C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S3999C1, buf);
    S3999C1 *dp, &lv = *(dp=new (buf) S3999C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S3999C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3999C1)");
    /*is_ambiguous_... S3999C2::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*)(S3999C2*), 0, "S3999C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3999C4*)(S3999C2*), ABISELECT(8,4), "S3999C1");
    check_base_class_offset(lv, (S3999C4*)(S3999C2*), ABISELECT(8,4), "S3999C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S3999C5*)(S3999C2*), ABISELECT(16,8), "S3999C1");
    check_base_class_offset(lv, (S3999C5*)(S3999C2*), ABISELECT(16,8), "S3999C1");
    check_base_class_offset(lv, (S3999C2*), 0, "S3999C1");
    check_field_offset(lv, s3999c1f0, ABISELECT(24,12), "S3999C1.s3999c1f0");
    check_field_offset(lv, s3999c1f1, ABISELECT(28,16), "S3999C1.s3999c1f1");
    check_field_offset(lv, s3999c1f2, ABISELECT(40,28), "S3999C1.s3999c1f2");
    check_field_offset(lv, s3999c1f3, ABISELECT(48,32), "S3999C1.s3999c1f3");
    check_field_offset(lv, s3999c1f4, ABISELECT(56,40), "S3999C1.s3999c1f4");
    test_class_info(&lv, &cd_S3999C1);
    dp->~S3999C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3999C1(Test_S3999C1, "S3999C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S3999C1C1Ev();
extern void _ZN7S3999C1D1Ev();
Name_Map name_map_S3999C1[] = {
  NSPAIR(_ZN7S3999C1C1Ev),
  NSPAIR(_ZN7S3999C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3999C4;
extern VTBL_ENTRY _ZTI7S3999C4[];
extern  VTBL_ENTRY _ZTV7S3999C4[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S3999C5;
extern VTBL_ENTRY _ZTI7S3999C5[];
extern  VTBL_ENTRY _ZTV7S3999C5[];
extern Class_Descriptor cd_S3999C2;
extern VTBL_ENTRY _ZTI7S3999C2[];
extern  VTBL_ENTRY _ZTV7S3999C2[];
static Base_Class bases_S3999C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3999C4,    ABISELECT(8,4), //bcp->offset
    18, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S4055C3_nt,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3999C5,    ABISELECT(16,8), //bcp->offset
    23, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3999C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3999C1[];
extern void _ZN7S3999C1D1Ev();
extern void _ZN7S3999C1D0Ev();
extern void _ZN7S3999C23v11Ev();
extern void _ZN7S3999C23v12Ev();
extern void _ZN7S3999C23v13Ev();
extern void _ZN7S3999C23v14Ev();
extern void _ZN7S3999C23v15Ev();
extern void _ZN7S3999C23v16Ev();
extern void _ZN7S3999C12v1Ev();
extern void _ZN7S3999C12v2Ev();
extern void _ZN7S3999C12v3Ev();
extern void _ZN7S3999C12v4Ev();
extern void _ZN7S3999C12v5Ev();
extern void _ZN7S3999C12v6Ev();
extern void _ZN7S3999C12v7Ev();
extern void _ZN7S3999C12v8Ev();
extern void ABISELECT(_ZThn8_N7S3999C1D1Ev,_ZThn4_N7S3999C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S3999C1D0Ev,_ZThn4_N7S3999C1D0Ev)();
extern void _ZN7S3999C42v9Ev();
extern void ABISELECT(_ZThn16_N7S3999C1D1Ev,_ZThn8_N7S3999C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S3999C1D0Ev,_ZThn8_N7S3999C1D0Ev)();
extern void _ZN7S3999C53v10Ev();
static  VTBL_ENTRY vtc_S3999C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3999C1[0]),
  (VTBL_ENTRY)&_ZN7S3999C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3999C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3999C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3999C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3999C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3999C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3999C23v15Ev,
  (VTBL_ENTRY)&_ZN7S3999C23v16Ev,
  (VTBL_ENTRY)&_ZN7S3999C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3999C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3999C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3999C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3999C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3999C12v6Ev,
  (VTBL_ENTRY)&_ZN7S3999C12v7Ev,
  (VTBL_ENTRY)&_ZN7S3999C12v8Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S3999C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3999C1D1Ev,_ZThn4_N7S3999C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S3999C1D0Ev,_ZThn4_N7S3999C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3999C42v9Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S3999C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3999C1D1Ev,_ZThn8_N7S3999C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N7S3999C1D0Ev,_ZThn8_N7S3999C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3999C53v10Ev,
};
extern VTBL_ENTRY _ZTI7S3999C1[];
extern  VTBL_ENTRY _ZTV7S3999C1[];
Class_Descriptor cd_S3999C1 = {  "S3999C1", // class name
  bases_S3999C1, 6,
  &(vtc_S3999C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S3999C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3999C1),28, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  6, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10632C3_nt  {
  char s10632c3f0;
  char s10632c3f1;
  char s10632c3f2[14];
};
//SIG(1 S10632C3_nt) C1{ Fc[16]}



//skip512 S10632C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10632C6  {
  char s10632c6f0;
  char s10632c6f1;
  short s10632c6f2;
  char s10632c6f3;
  char s10632c6f4;
  char s10632c6f5;
  char s10632c6f6;
  char s10632c6f7[12];
};
//SIG(1 S10632C6) C1{ Fc[2] Fs Fc[16]}



static void Test_S10632C6()
{
  {
    init_simple_test("S10632C6");
    S10632C6 lv;
    check2(sizeof(lv), 20, "sizeof(S10632C6)");
    check2(__alignof__(lv), 2, "__alignof__(S10632C6)");
    check_field_offset(lv, s10632c6f0, 0, "S10632C6.s10632c6f0");
    check_field_offset(lv, s10632c6f1, 1, "S10632C6.s10632c6f1");
    check_field_offset(lv, s10632c6f2, 2, "S10632C6.s10632c6f2");
    check_field_offset(lv, s10632c6f3, 4, "S10632C6.s10632c6f3");
    check_field_offset(lv, s10632c6f4, 5, "S10632C6.s10632c6f4");
    check_field_offset(lv, s10632c6f5, 6, "S10632C6.s10632c6f5");
    check_field_offset(lv, s10632c6f6, 7, "S10632C6.s10632c6f6");
    check_field_offset(lv, s10632c6f7, 8, "S10632C6.s10632c6f7");
  }
}
static Arrange_To_Call_Me vS10632C6(Test_S10632C6, "S10632C6", 20);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S10632C2  {
  ::S10632C3_nt s10632c2f0;
  ::S8715C40 s10632c2f1;
  ::S10632C6 s10632c2f2;
};
//SIG(1 S10632C2) U1{ FC2{ Fc Fc Fc[14]} FC3{ Fc Fc Fs FC4{ Fi} Fs Fc[6]} FC5{ Fc Fc Fs Fc Fc Fc Fc Fc[12]}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S10632C1  {
  char s10632c1f0[16];
  ::S10632C2 s10632c1f1;
  ::S10632C2 s10632c1f2;
  ::S10632C2 s10632c1f3;
  int s10632c1f4;
  int s10632c1f5;
  int s10632c1f6;
};
//SIG(1 S10632C1) C1{ Fc[16] FU2{ FC3{ Fc Fc Fc[14]} FC4{ Fc Fc Fs FC5{ Fi} Fs Fc[6]} FC6{ Fc Fc Fs Fc Fc Fc Fc Fc[12]}} FU2 FU2 Fi Fi Fi}



static void Test_S10632C1()
{
  {
    init_simple_test("S10632C1");
    S10632C1 lv;
    check2(sizeof(lv), 88, "sizeof(S10632C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10632C1)");
    check_field_offset(lv, s10632c1f0, 0, "S10632C1.s10632c1f0");
    check_field_offset(lv, s10632c1f1, 16, "S10632C1.s10632c1f1");
    check_field_offset(lv, s10632c1f2, 36, "S10632C1.s10632c1f2");
    check_field_offset(lv, s10632c1f3, 56, "S10632C1.s10632c1f3");
    check_field_offset(lv, s10632c1f4, 76, "S10632C1.s10632c1f4");
    check_field_offset(lv, s10632c1f5, 80, "S10632C1.s10632c1f5");
    check_field_offset(lv, s10632c1f6, 84, "S10632C1.s10632c1f6");
  }
}
static Arrange_To_Call_Me vS10632C1(Test_S10632C1, "S10632C1", 88);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9004C2  {
  virtual  ~S9004C2(); // _ZN7S9004C2D1Ev
  virtual void  v2(); // _ZN7S9004C22v2Ev
  virtual void  v3(); // _ZN7S9004C22v3Ev
  S9004C2(); // tgen
};
//SIG(-1 S9004C2) C1{ vd v1 v2}


 S9004C2 ::~S9004C2(){ note_dtor("S9004C2", this);}
void  S9004C2 ::v2(){vfunc_called(this, "_ZN7S9004C22v2Ev");}
void  S9004C2 ::v3(){vfunc_called(this, "_ZN7S9004C22v3Ev");}
S9004C2 ::S9004C2(){ note_ctor("S9004C2", this);} // tgen

static void Test_S9004C2()
{
  extern Class_Descriptor cd_S9004C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9004C2, buf);
    S9004C2 *dp, &lv = *(dp=new (buf) S9004C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9004C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9004C2)");
    test_class_info(&lv, &cd_S9004C2);
    dp->~S9004C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9004C2(Test_S9004C2, "S9004C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9004C2C1Ev();
extern void _ZN7S9004C2D1Ev();
Name_Map name_map_S9004C2[] = {
  NSPAIR(_ZN7S9004C2C1Ev),
  NSPAIR(_ZN7S9004C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9004C2[];
extern void _ZN7S9004C2D1Ev();
extern void _ZN7S9004C2D0Ev();
extern void _ZN7S9004C22v2Ev();
extern void _ZN7S9004C22v3Ev();
static  VTBL_ENTRY vtc_S9004C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9004C2[0]),
  (VTBL_ENTRY)&_ZN7S9004C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9004C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9004C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9004C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S9004C2[];
extern  VTBL_ENTRY _ZTV7S9004C2[];
Class_Descriptor cd_S9004C2 = {  "S9004C2", // class name
  0,0,//no base classes
  &(vtc_S9004C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9004C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9004C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9004C1  : S9004C2 {
  ::S9538C4 s9004c1f0;
  virtual void  v1(); // _ZN7S9004C12v1Ev
  ~S9004C1(); // tgen
  S9004C1(); // tgen
};
//SIG(1 S9004C1) C1{ BC2{ vd v2 v3} v1 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi FL Fi[2] FL[2] Fc[2] FC4 FC4 FC4 FC4 Fi[3] FC4 FC4 FC4 Fi FC4}}


void  S9004C1 ::v1(){vfunc_called(this, "_ZN7S9004C12v1Ev");}
S9004C1 ::~S9004C1(){ note_dtor("S9004C1", this);} // tgen
S9004C1 ::S9004C1(){ note_ctor("S9004C1", this);} // tgen

static void Test_S9004C1()
{
  extern Class_Descriptor cd_S9004C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,43)];
    init_test(&cd_S9004C1, buf);
    S9004C1 *dp, &lv = *(dp=new (buf) S9004C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,168), "sizeof(S9004C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9004C1)");
    check_base_class_offset(lv, (S9004C2*), 0, "S9004C1");
    check_field_offset(lv, s9004c1f0, ABISELECT(8,4), "S9004C1.s9004c1f0");
    test_class_info(&lv, &cd_S9004C1);
    dp->~S9004C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9004C1(Test_S9004C1, "S9004C1", ABISELECT(224,168));

#else // __cplusplus

extern void _ZN7S9004C1C1Ev();
extern void _ZN7S9004C1D1Ev();
Name_Map name_map_S9004C1[] = {
  NSPAIR(_ZN7S9004C1C1Ev),
  NSPAIR(_ZN7S9004C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9004C2;
extern VTBL_ENTRY _ZTI7S9004C2[];
extern  VTBL_ENTRY _ZTV7S9004C2[];
static Base_Class bases_S9004C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9004C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9004C1[];
extern void _ZN7S9004C1D1Ev();
extern void _ZN7S9004C1D0Ev();
extern void _ZN7S9004C22v2Ev();
extern void _ZN7S9004C22v3Ev();
extern void _ZN7S9004C12v1Ev();
static  VTBL_ENTRY vtc_S9004C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9004C1[0]),
  (VTBL_ENTRY)&_ZN7S9004C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9004C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9004C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9004C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9004C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9004C1[];
extern  VTBL_ENTRY _ZTV7S9004C1[];
Class_Descriptor cd_S9004C1 = {  "S9004C1", // class name
  bases_S9004C1, 1,
  &(vtc_S9004C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,168), // object size
  NSPAIRA(_ZTI7S9004C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9004C1),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8554C2_nt  {
  virtual  ~S8554C2_nt(); // _ZN10S8554C2_ntD1Ev
  virtual void  v11(); // _ZN10S8554C2_nt3v11Ev
  virtual void  v12(); // _ZN10S8554C2_nt3v12Ev
  virtual void  v13(); // _ZN10S8554C2_nt3v13Ev
  virtual void  v14(); // _ZN10S8554C2_nt3v14Ev
  virtual void  v15(); // _ZN10S8554C2_nt3v15Ev
  virtual void  v16(); // _ZN10S8554C2_nt3v16Ev
  virtual void  v17(); // _ZN10S8554C2_nt3v17Ev
  virtual void  v18(); // _ZN10S8554C2_nt3v18Ev
  virtual void  v19(); // _ZN10S8554C2_nt3v19Ev
  virtual void  v20(); // _ZN10S8554C2_nt3v20Ev
  S8554C2_nt(); // tgen
};
//SIG(-1 S8554C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10}


 S8554C2_nt ::~S8554C2_nt(){ note_dtor("S8554C2_nt", this);}
void  S8554C2_nt ::v11(){vfunc_called(this, "_ZN10S8554C2_nt3v11Ev");}
void  S8554C2_nt ::v12(){vfunc_called(this, "_ZN10S8554C2_nt3v12Ev");}
void  S8554C2_nt ::v13(){vfunc_called(this, "_ZN10S8554C2_nt3v13Ev");}
void  S8554C2_nt ::v14(){vfunc_called(this, "_ZN10S8554C2_nt3v14Ev");}
void  S8554C2_nt ::v15(){vfunc_called(this, "_ZN10S8554C2_nt3v15Ev");}
void  S8554C2_nt ::v16(){vfunc_called(this, "_ZN10S8554C2_nt3v16Ev");}
void  S8554C2_nt ::v17(){vfunc_called(this, "_ZN10S8554C2_nt3v17Ev");}
void  S8554C2_nt ::v18(){vfunc_called(this, "_ZN10S8554C2_nt3v18Ev");}
void  S8554C2_nt ::v19(){vfunc_called(this, "_ZN10S8554C2_nt3v19Ev");}
void  S8554C2_nt ::v20(){vfunc_called(this, "_ZN10S8554C2_nt3v20Ev");}
S8554C2_nt ::S8554C2_nt(){ note_ctor("S8554C2_nt", this);} // tgen

//skip512 S8554C2_nt

#else // __cplusplus

extern void _ZN10S8554C2_ntC1Ev();
extern void _ZN10S8554C2_ntD1Ev();
Name_Map name_map_S8554C2_nt[] = {
  NSPAIR(_ZN10S8554C2_ntC1Ev),
  NSPAIR(_ZN10S8554C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8554C2_nt[];
extern void _ZN10S8554C2_ntD1Ev();
extern void _ZN10S8554C2_ntD0Ev();
extern void _ZN10S8554C2_nt3v11Ev();
extern void _ZN10S8554C2_nt3v12Ev();
extern void _ZN10S8554C2_nt3v13Ev();
extern void _ZN10S8554C2_nt3v14Ev();
extern void _ZN10S8554C2_nt3v15Ev();
extern void _ZN10S8554C2_nt3v16Ev();
extern void _ZN10S8554C2_nt3v17Ev();
extern void _ZN10S8554C2_nt3v18Ev();
extern void _ZN10S8554C2_nt3v19Ev();
extern void _ZN10S8554C2_nt3v20Ev();
static  VTBL_ENTRY vtc_S8554C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8554C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8554C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v20Ev,
};
extern VTBL_ENTRY _ZTI10S8554C2_nt[];
VTBL_ENTRY *P__ZTI10S8554C2_nt = _ZTI10S8554C2_nt; 
extern  VTBL_ENTRY _ZTV10S8554C2_nt[];
Class_Descriptor cd_S8554C2_nt = {  "S8554C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8554C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S8554C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8554C2_nt),14, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8554C1  : S8554C2_nt {
  int s8554c1f0[2];
  void *s8554c1f1;
  int s8554c1f2[2];
  void *s8554c1f3;
  virtual  ~S8554C1(); // _ZN7S8554C1D1Ev
  virtual void  v1(); // _ZN7S8554C12v1Ev
  virtual void  v2(); // _ZN7S8554C12v2Ev
  virtual void  v3(); // _ZN7S8554C12v3Ev
  virtual void  v4(); // _ZN7S8554C12v4Ev
  virtual void  v5(); // _ZN7S8554C12v5Ev
  virtual void  v6(); // _ZN7S8554C12v6Ev
  virtual void  v7(); // _ZN7S8554C12v7Ev
  virtual void  v8(); // _ZN7S8554C12v8Ev
  virtual void  v9(); // _ZN7S8554C12v9Ev
  virtual void  v10(); // _ZN7S8554C13v10Ev
  S8554C1(); // tgen
};
//SIG(1 S8554C1) C1{ BC2{ vd v11 v12 v13 v14 v15 v16 v17 v18 v19 v20} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi[2] Fp Fi[2] Fp}


 S8554C1 ::~S8554C1(){ note_dtor("S8554C1", this);}
void  S8554C1 ::v1(){vfunc_called(this, "_ZN7S8554C12v1Ev");}
void  S8554C1 ::v2(){vfunc_called(this, "_ZN7S8554C12v2Ev");}
void  S8554C1 ::v3(){vfunc_called(this, "_ZN7S8554C12v3Ev");}
void  S8554C1 ::v4(){vfunc_called(this, "_ZN7S8554C12v4Ev");}
void  S8554C1 ::v5(){vfunc_called(this, "_ZN7S8554C12v5Ev");}
void  S8554C1 ::v6(){vfunc_called(this, "_ZN7S8554C12v6Ev");}
void  S8554C1 ::v7(){vfunc_called(this, "_ZN7S8554C12v7Ev");}
void  S8554C1 ::v8(){vfunc_called(this, "_ZN7S8554C12v8Ev");}
void  S8554C1 ::v9(){vfunc_called(this, "_ZN7S8554C12v9Ev");}
void  S8554C1 ::v10(){vfunc_called(this, "_ZN7S8554C13v10Ev");}
S8554C1 ::S8554C1(){ note_ctor("S8554C1", this);} // tgen

static void Test_S8554C1()
{
  extern Class_Descriptor cd_S8554C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S8554C1, buf);
    S8554C1 *dp, &lv = *(dp=new (buf) S8554C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S8554C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8554C1)");
    check_base_class_offset(lv, (S8554C2_nt*), 0, "S8554C1");
    check_field_offset(lv, s8554c1f0, ABISELECT(8,4), "S8554C1.s8554c1f0");
    check_field_offset(lv, s8554c1f1, ABISELECT(16,12), "S8554C1.s8554c1f1");
    check_field_offset(lv, s8554c1f2, ABISELECT(24,16), "S8554C1.s8554c1f2");
    check_field_offset(lv, s8554c1f3, ABISELECT(32,24), "S8554C1.s8554c1f3");
    test_class_info(&lv, &cd_S8554C1);
    dp->~S8554C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8554C1(Test_S8554C1, "S8554C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S8554C1C1Ev();
extern void _ZN7S8554C1D1Ev();
Name_Map name_map_S8554C1[] = {
  NSPAIR(_ZN7S8554C1C1Ev),
  NSPAIR(_ZN7S8554C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8554C2_nt;
extern VTBL_ENTRY _ZTI10S8554C2_nt[];
extern  VTBL_ENTRY _ZTV10S8554C2_nt[];
static Base_Class bases_S8554C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8554C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8554C1[];
extern void _ZN7S8554C1D1Ev();
extern void _ZN7S8554C1D0Ev();
extern void _ZN10S8554C2_nt3v11Ev();
extern void _ZN10S8554C2_nt3v12Ev();
extern void _ZN10S8554C2_nt3v13Ev();
extern void _ZN10S8554C2_nt3v14Ev();
extern void _ZN10S8554C2_nt3v15Ev();
extern void _ZN10S8554C2_nt3v16Ev();
extern void _ZN10S8554C2_nt3v17Ev();
extern void _ZN10S8554C2_nt3v18Ev();
extern void _ZN10S8554C2_nt3v19Ev();
extern void _ZN10S8554C2_nt3v20Ev();
extern void _ZN7S8554C12v1Ev();
extern void _ZN7S8554C12v2Ev();
extern void _ZN7S8554C12v3Ev();
extern void _ZN7S8554C12v4Ev();
extern void _ZN7S8554C12v5Ev();
extern void _ZN7S8554C12v6Ev();
extern void _ZN7S8554C12v7Ev();
extern void _ZN7S8554C12v8Ev();
extern void _ZN7S8554C12v9Ev();
extern void _ZN7S8554C13v10Ev();
static  VTBL_ENTRY vtc_S8554C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8554C1[0]),
  (VTBL_ENTRY)&_ZN7S8554C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8554C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S8554C2_nt3v20Ev,
  (VTBL_ENTRY)&_ZN7S8554C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8554C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8554C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8554C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8554C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8554C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8554C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8554C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8554C12v9Ev,
  (VTBL_ENTRY)&_ZN7S8554C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S8554C1[];
extern  VTBL_ENTRY _ZTV7S8554C1[];
Class_Descriptor cd_S8554C1 = {  "S8554C1", // class name
  bases_S8554C1, 1,
  &(vtc_S8554C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S8554C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8554C1),24, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3786C2_nt  : S3817C3_nt {
  int s3786c2f0;
  virtual  ~S3786C2_nt(); // _ZN10S3786C2_ntD1Ev
  S3786C2_nt(); // tgen
};
//SIG(-1 S3786C2_nt) C1{ BC2{ vd m Fi} vd Fi}


 S3786C2_nt ::~S3786C2_nt(){ note_dtor("S3786C2_nt", this);}
S3786C2_nt ::S3786C2_nt(){ note_ctor("S3786C2_nt", this);} // tgen

//skip512 S3786C2_nt

#else // __cplusplus

extern void _ZN10S3786C2_ntC1Ev();
extern void _ZN10S3786C2_ntD1Ev();
Name_Map name_map_S3786C2_nt[] = {
  NSPAIR(_ZN10S3786C2_ntC1Ev),
  NSPAIR(_ZN10S3786C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3817C3_nt;
extern VTBL_ENTRY _ZTI10S3817C3_nt[];
extern  VTBL_ENTRY _ZTV10S3817C3_nt[];
static Base_Class bases_S3786C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3817C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3786C2_nt[];
extern void _ZN10S3786C2_ntD1Ev();
extern void _ZN10S3786C2_ntD0Ev();
static  VTBL_ENTRY vtc_S3786C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3786C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3786C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3786C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3786C2_nt[];
VTBL_ENTRY *P__ZTI10S3786C2_nt = _ZTI10S3786C2_nt; 
extern  VTBL_ENTRY _ZTV10S3786C2_nt[];
Class_Descriptor cd_S3786C2_nt = {  "S3786C2_nt", // class name
  bases_S3786C2_nt, 1,
  &(vtc_S3786C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S3786C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3786C2_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3786C1  : S3786C2_nt {
  int s3786c1f0[2];
  ::S21714C10_nt s3786c1f1;
  ::S9538C14_nt s3786c1f2;
  ::S8663C4_nt s3786c1f3;
  void *s3786c1f4;
  virtual  ~S3786C1(); // _ZN7S3786C1D1Ev
  S3786C1(); // tgen
};
//SIG(1 S3786C1) C1{ BC2{ BC3{ vd m Fi} vd Fi} vd Fi[2] FC4{ m Fp Fi FC5{ m}} FC6{ m Fp Fi[2] FC5} FC7{ m Fp Fi[2] FC5} Fp}


 S3786C1 ::~S3786C1(){ note_dtor("S3786C1", this);}
S3786C1 ::S3786C1(){ note_ctor("S3786C1", this);} // tgen

static void Test_S3786C1()
{
  extern Class_Descriptor cd_S3786C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,18)];
    init_test(&cd_S3786C1, buf);
    S3786C1 *dp, &lv = *(dp=new (buf) S3786C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,68), "sizeof(S3786C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3786C1)");
    check_base_class_offset(lv, (S3817C3_nt*)(S3786C2_nt*), 0, "S3786C1");
    check_base_class_offset(lv, (S3786C2_nt*), 0, "S3786C1");
    check_field_offset(lv, s3786c1f0, ABISELECT(16,12), "S3786C1.s3786c1f0");
    check_field_offset(lv, s3786c1f1, ABISELECT(24,20), "S3786C1.s3786c1f1");
    check_field_offset(lv, s3786c1f2, ABISELECT(40,32), "S3786C1.s3786c1f2");
    check_field_offset(lv, s3786c1f3, ABISELECT(64,48), "S3786C1.s3786c1f3");
    check_field_offset(lv, s3786c1f4, ABISELECT(88,64), "S3786C1.s3786c1f4");
    test_class_info(&lv, &cd_S3786C1);
    dp->~S3786C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3786C1(Test_S3786C1, "S3786C1", ABISELECT(96,68));

#else // __cplusplus

extern void _ZN7S3786C1C1Ev();
extern void _ZN7S3786C1D1Ev();
Name_Map name_map_S3786C1[] = {
  NSPAIR(_ZN7S3786C1C1Ev),
  NSPAIR(_ZN7S3786C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3817C3_nt;
extern VTBL_ENTRY _ZTI10S3817C3_nt[];
extern  VTBL_ENTRY _ZTV10S3817C3_nt[];
extern Class_Descriptor cd_S3786C2_nt;
extern VTBL_ENTRY _ZTI10S3786C2_nt[];
extern  VTBL_ENTRY _ZTV10S3786C2_nt[];
static Base_Class bases_S3786C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3817C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3786C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3786C1[];
extern void _ZN7S3786C1D1Ev();
extern void _ZN7S3786C1D0Ev();
static  VTBL_ENTRY vtc_S3786C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3786C1[0]),
  (VTBL_ENTRY)&_ZN7S3786C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3786C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3786C1[];
extern  VTBL_ENTRY _ZTV7S3786C1[];
Class_Descriptor cd_S3786C1 = {  "S3786C1", // class name
  bases_S3786C1, 2,
  &(vtc_S3786C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,68), // object size
  NSPAIRA(_ZTI7S3786C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3786C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9540C2  {
  virtual  ~S9540C2(); // _ZN7S9540C2D1Ev
  virtual void  v3(); // _ZN7S9540C22v3Ev
  virtual void  v4(); // _ZN7S9540C22v4Ev
  S9540C2(); // tgen
};
//SIG(-1 S9540C2) C1{ vd v1 v2}


 S9540C2 ::~S9540C2(){ note_dtor("S9540C2", this);}
void  S9540C2 ::v3(){vfunc_called(this, "_ZN7S9540C22v3Ev");}
void  S9540C2 ::v4(){vfunc_called(this, "_ZN7S9540C22v4Ev");}
S9540C2 ::S9540C2(){ note_ctor("S9540C2", this);} // tgen

static void Test_S9540C2()
{
  extern Class_Descriptor cd_S9540C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9540C2, buf);
    S9540C2 *dp, &lv = *(dp=new (buf) S9540C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9540C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9540C2)");
    test_class_info(&lv, &cd_S9540C2);
    dp->~S9540C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9540C2(Test_S9540C2, "S9540C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9540C2C1Ev();
extern void _ZN7S9540C2D1Ev();
Name_Map name_map_S9540C2[] = {
  NSPAIR(_ZN7S9540C2C1Ev),
  NSPAIR(_ZN7S9540C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9540C2[];
extern void _ZN7S9540C2D1Ev();
extern void _ZN7S9540C2D0Ev();
extern void _ZN7S9540C22v3Ev();
extern void _ZN7S9540C22v4Ev();
static  VTBL_ENTRY vtc_S9540C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9540C2[0]),
  (VTBL_ENTRY)&_ZN7S9540C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9540C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9540C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9540C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9540C2[];
extern  VTBL_ENTRY _ZTV7S9540C2[];
Class_Descriptor cd_S9540C2 = {  "S9540C2", // class name
  0,0,//no base classes
  &(vtc_S9540C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9540C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9540C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9540C1  : S9540C2 {
  ::S9538C11 s9540c1f0;
  void *s9540c1f1;
  virtual void  v1(); // _ZN7S9540C12v1Ev
  virtual void  v2(); // _ZN7S9540C12v2Ev
  ~S9540C1(); // tgen
  S9540C1(); // tgen
};
//SIG(1 S9540C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m FC4{ m FL FC5{ m FC6{ m Fp Fi FC7{ m}} Fi FC6} Fi} FC8{ m Fp Fi[2] FC9{ m}} Fc} Fp}


void  S9540C1 ::v1(){vfunc_called(this, "_ZN7S9540C12v1Ev");}
void  S9540C1 ::v2(){vfunc_called(this, "_ZN7S9540C12v2Ev");}
S9540C1 ::~S9540C1(){ note_dtor("S9540C1", this);} // tgen
S9540C1 ::S9540C1(){ note_ctor("S9540C1", this);} // tgen

static void Test_S9540C1()
{
  extern Class_Descriptor cd_S9540C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S9540C1, buf);
    S9540C1 *dp, &lv = *(dp=new (buf) S9540C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S9540C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9540C1)");
    check_base_class_offset(lv, (S9540C2*), 0, "S9540C1");
    check_field_offset(lv, s9540c1f0, ABISELECT(8,4), "S9540C1.s9540c1f0");
    check_field_offset(lv, s9540c1f1, ABISELECT(96,64), "S9540C1.s9540c1f1");
    test_class_info(&lv, &cd_S9540C1);
    dp->~S9540C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9540C1(Test_S9540C1, "S9540C1", ABISELECT(104,68));

#else // __cplusplus

extern void _ZN7S9540C1C1Ev();
extern void _ZN7S9540C1D1Ev();
Name_Map name_map_S9540C1[] = {
  NSPAIR(_ZN7S9540C1C1Ev),
  NSPAIR(_ZN7S9540C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9540C2;
extern VTBL_ENTRY _ZTI7S9540C2[];
extern  VTBL_ENTRY _ZTV7S9540C2[];
static Base_Class bases_S9540C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9540C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9540C1[];
extern void _ZN7S9540C1D1Ev();
extern void _ZN7S9540C1D0Ev();
extern void _ZN7S9540C22v3Ev();
extern void _ZN7S9540C22v4Ev();
extern void _ZN7S9540C12v1Ev();
extern void _ZN7S9540C12v2Ev();
static  VTBL_ENTRY vtc_S9540C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9540C1[0]),
  (VTBL_ENTRY)&_ZN7S9540C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9540C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9540C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9540C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9540C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9540C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9540C1[];
extern  VTBL_ENTRY _ZTV7S9540C1[];
Class_Descriptor cd_S9540C1 = {  "S9540C1", // class name
  bases_S9540C1, 1,
  &(vtc_S9540C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,68), // object size
  NSPAIRA(_ZTI7S9540C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9540C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8243C3  : S4055C3_nt {
  virtual  ~S8243C3(); // _ZN7S8243C3D1Ev
  virtual void  v2(); // _ZN7S8243C32v2Ev
  S8243C3(); // tgen
};
//SIG(-1 S8243C3) C1{ BC2{ vd m} vd v1}


 S8243C3 ::~S8243C3(){ note_dtor("S8243C3", this);}
void  S8243C3 ::v2(){vfunc_called(this, "_ZN7S8243C32v2Ev");}
S8243C3 ::S8243C3(){ note_ctor("S8243C3", this);} // tgen

static void Test_S8243C3()
{
  extern Class_Descriptor cd_S8243C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8243C3, buf);
    S8243C3 *dp, &lv = *(dp=new (buf) S8243C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8243C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8243C3)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S8243C3");
    test_class_info(&lv, &cd_S8243C3);
    dp->~S8243C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8243C3(Test_S8243C3, "S8243C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8243C3C1Ev();
extern void _ZN7S8243C3D1Ev();
Name_Map name_map_S8243C3[] = {
  NSPAIR(_ZN7S8243C3C1Ev),
  NSPAIR(_ZN7S8243C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S8243C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8243C3[];
extern void _ZN7S8243C3D1Ev();
extern void _ZN7S8243C3D0Ev();
extern void _ZN7S8243C32v2Ev();
static  VTBL_ENTRY vtc_S8243C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8243C3[0]),
  (VTBL_ENTRY)&_ZN7S8243C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8243C3D0Ev,
  (VTBL_ENTRY)&_ZN7S8243C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S8243C3[];
extern  VTBL_ENTRY _ZTV7S8243C3[];
Class_Descriptor cd_S8243C3 = {  "S8243C3", // class name
  bases_S8243C3, 1,
  &(vtc_S8243C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8243C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8243C3),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8243C5  {
  int s8243c5f0;
  void *s8243c5f1;
  int s8243c5f2;
  void *s8243c5f3;
  char s8243c5f4;
  __tsi64 s8243c5f5;
  void  mf8243c5(); // _ZN7S8243C58mf8243c5Ev
};
//SIG(-1 S8243C5) C1{ m Fi Fp Fi Fp Fc FL}


void  S8243C5 ::mf8243c5(){}

static void Test_S8243C5()
{
  {
    init_simple_test("S8243C5");
    S8243C5 lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S8243C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8243C5)");
    check_field_offset(lv, s8243c5f0, 0, "S8243C5.s8243c5f0");
    check_field_offset(lv, s8243c5f1, ABISELECT(8,4), "S8243C5.s8243c5f1");
    check_field_offset(lv, s8243c5f2, ABISELECT(16,8), "S8243C5.s8243c5f2");
    check_field_offset(lv, s8243c5f3, ABISELECT(24,12), "S8243C5.s8243c5f3");
    check_field_offset(lv, s8243c5f4, ABISELECT(32,16), "S8243C5.s8243c5f4");
    check_field_offset(lv, s8243c5f5, ABISELECT(40,20), "S8243C5.s8243c5f5");
  }
}
static Arrange_To_Call_Me vS8243C5(Test_S8243C5, "S8243C5", ABISELECT(48,28));

#else // __cplusplus

Class_Descriptor cd_S8243C5 = {  "S8243C5", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(48,28), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8243C8  {
  int s8243c8f0[244];
};
//SIG(-1 S8243C8) C1{ Fi[244]}



static void Test_S8243C8()
{
  {
    init_simple_test("S8243C8");
    S8243C8 lv;
    check2(sizeof(lv), 976, "sizeof(S8243C8)");
    check2(__alignof__(lv), 4, "__alignof__(S8243C8)");
    check_field_offset(lv, s8243c8f0, 0, "S8243C8.s8243c8f0");
  }
}
static Arrange_To_Call_Me vS8243C8(Test_S8243C8, "S8243C8", 976);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8243C7  {
  ::S8243C8 s8243c7f0;
  char s8243c7f1[32];
};
//SIG(-1 S8243C7) C1{ FC2{ Fi[244]} Fc[32]}



static void Test_S8243C7()
{
  {
    init_simple_test("S8243C7");
    S8243C7 lv;
    check2(sizeof(lv), 1008, "sizeof(S8243C7)");
    check2(__alignof__(lv), 4, "__alignof__(S8243C7)");
    check_field_offset(lv, s8243c7f0, 0, "S8243C7.s8243c7f0");
    check_field_offset(lv, s8243c7f1, 976, "S8243C7.s8243c7f1");
  }
}
static Arrange_To_Call_Me vS8243C7(Test_S8243C7, "S8243C7", 1008);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8243C6  {
  ::S8243C7 s8243c6f0;
  void  mf8243c6(); // _ZN7S8243C68mf8243c6Ev
};
//SIG(-1 S8243C6) C1{ m FC2{ FC3{ Fi[244]} Fc[32]}}


void  S8243C6 ::mf8243c6(){}

static void Test_S8243C6()
{
  {
    init_simple_test("S8243C6");
    S8243C6 lv;
    check2(sizeof(lv), 1008, "sizeof(S8243C6)");
    check2(__alignof__(lv), 4, "__alignof__(S8243C6)");
    check_field_offset(lv, s8243c6f0, 0, "S8243C6.s8243c6f0");
  }
}
static Arrange_To_Call_Me vS8243C6(Test_S8243C6, "S8243C6", 1008);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8243C4  : S8243C5 {
  ::S8243C6 s8243c4f0;
  char s8243c4f1;
  void *s8243c4f2;
  __tsi64 s8243c4f3;
};
//SIG(-1 S8243C4) C1{ BC2{ m Fi Fp Fi Fp Fc FL} FC3{ m FC4{ FC5{ Fi[244]} Fc[32]}} Fc Fp FL}



static void Test_S8243C4()
{
  extern Class_Descriptor cd_S8243C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(136,264)];
    init_test(&cd_S8243C4, buf);
    S8243C4 &lv = *(new (buf) S8243C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1080,1052), "sizeof(S8243C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8243C4)");
    check_base_class_offset(lv, (S8243C5*), 0, "S8243C4");
    check_field_offset(lv, s8243c4f0, ABISELECT(48,28), "S8243C4.s8243c4f0");
    check_field_offset(lv, s8243c4f1, ABISELECT(1056,1036), "S8243C4.s8243c4f1");
    check_field_offset(lv, s8243c4f2, ABISELECT(1064,1040), "S8243C4.s8243c4f2");
    check_field_offset(lv, s8243c4f3, ABISELECT(1072,1044), "S8243C4.s8243c4f3");
    test_class_info(&lv, &cd_S8243C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8243C4(Test_S8243C4, "S8243C4", ABISELECT(1080,1052));

#else // __cplusplus

extern Class_Descriptor cd_S8243C5;
static Base_Class bases_S8243C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8243C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S8243C4 = {  "S8243C4", // class name
  bases_S8243C4, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(1080,1052), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8243C1  : S4055C3_nt , S8243C3 {
  ::S8243C4 s8243c1f0;
  void *s8243c1f1;
  virtual void  v1(); // _ZN7S8243C12v1Ev
  ~S8243C1(); // tgen
  S8243C1(); // tgen
};
//SIG(1 S8243C1) C1{ BC2{ vd m} BC3{ BC2 vd v2} v1 FC4{ BC5{ m Fi Fp Fi Fp Fc FL} FC6{ m FC7{ FC8{ Fi[244]} Fc[32]}} Fc Fp FL} Fp}


void  S8243C1 ::v1(){vfunc_called(this, "_ZN7S8243C12v1Ev");}
S8243C1 ::~S8243C1(){ note_dtor("S8243C1", this);} // tgen
S8243C1 ::S8243C1(){ note_ctor("S8243C1", this);} // tgen

static void Test_S8243C1()
{
  extern Class_Descriptor cd_S8243C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(139,267)];
    init_test(&cd_S8243C1, buf);
    S8243C1 *dp, &lv = *(dp=new (buf) S8243C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1104,1064), "sizeof(S8243C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8243C1)");
    /*is_ambiguous_... S8243C1::S4055C3_nt */ AMB_check_base_class_offset(lv, (S4055C3_nt*), 0, "S8243C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S8243C3*), ABISELECT(8,4), "S8243C1");
    check_base_class_offset(lv, (S8243C3*), ABISELECT(8,4), "S8243C1");
    check_field_offset(lv, s8243c1f0, ABISELECT(16,8), "S8243C1.s8243c1f0");
    check_field_offset(lv, s8243c1f1, ABISELECT(1096,1060), "S8243C1.s8243c1f1");
    test_class_info(&lv, &cd_S8243C1);
    dp->~S8243C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8243C1(Test_S8243C1, "S8243C1", ABISELECT(1104,1064));

#else // __cplusplus

extern void _ZN7S8243C1C1Ev();
extern void _ZN7S8243C1D1Ev();
Name_Map name_map_S8243C1[] = {
  NSPAIR(_ZN7S8243C1C1Ev),
  NSPAIR(_ZN7S8243C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S8243C3;
extern VTBL_ENTRY _ZTI7S8243C3[];
extern  VTBL_ENTRY _ZTV7S8243C3[];
static Base_Class bases_S8243C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S8243C3,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8243C1[];
extern void _ZN7S8243C1D1Ev();
extern void _ZN7S8243C1D0Ev();
extern void _ZN7S8243C12v1Ev();
extern void ABISELECT(_ZThn8_N7S8243C1D1Ev,_ZThn4_N7S8243C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S8243C1D0Ev,_ZThn4_N7S8243C1D0Ev)();
extern void _ZN7S8243C32v2Ev();
static  VTBL_ENTRY vtc_S8243C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8243C1[0]),
  (VTBL_ENTRY)&_ZN7S8243C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8243C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8243C12v1Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S8243C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8243C1D1Ev,_ZThn4_N7S8243C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S8243C1D0Ev,_ZThn4_N7S8243C1D0Ev),
  (VTBL_ENTRY)&_ZN7S8243C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S8243C1[];
extern  VTBL_ENTRY _ZTV7S8243C1[];
Class_Descriptor cd_S8243C1 = {  "S8243C1", // class name
  bases_S8243C1, 3,
  &(vtc_S8243C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1104,1064), // object size
  NSPAIRA(_ZTI7S8243C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S8243C1),10, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  3, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6734C2  {
  virtual  ~S6734C2(); // _ZN7S6734C2D1Ev
  virtual void  v3(); // _ZN7S6734C22v3Ev
  virtual void  v4(); // _ZN7S6734C22v4Ev
  S6734C2(); // tgen
};
//SIG(-1 S6734C2) C1{ vd v1 v2}


 S6734C2 ::~S6734C2(){ note_dtor("S6734C2", this);}
void  S6734C2 ::v3(){vfunc_called(this, "_ZN7S6734C22v3Ev");}
void  S6734C2 ::v4(){vfunc_called(this, "_ZN7S6734C22v4Ev");}
S6734C2 ::S6734C2(){ note_ctor("S6734C2", this);} // tgen

static void Test_S6734C2()
{
  extern Class_Descriptor cd_S6734C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6734C2, buf);
    S6734C2 *dp, &lv = *(dp=new (buf) S6734C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6734C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6734C2)");
    test_class_info(&lv, &cd_S6734C2);
    dp->~S6734C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6734C2(Test_S6734C2, "S6734C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6734C2C1Ev();
extern void _ZN7S6734C2D1Ev();
Name_Map name_map_S6734C2[] = {
  NSPAIR(_ZN7S6734C2C1Ev),
  NSPAIR(_ZN7S6734C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6734C2[];
extern void _ZN7S6734C2D1Ev();
extern void _ZN7S6734C2D0Ev();
extern void _ZN7S6734C22v3Ev();
extern void _ZN7S6734C22v4Ev();
static  VTBL_ENTRY vtc_S6734C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6734C2[0]),
  (VTBL_ENTRY)&_ZN7S6734C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6734C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6734C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6734C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S6734C2[];
extern  VTBL_ENTRY _ZTV7S6734C2[];
Class_Descriptor cd_S6734C2 = {  "S6734C2", // class name
  0,0,//no base classes
  &(vtc_S6734C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6734C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6734C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6734C3  {
  void *s6734c3f0;
  ::S5330C18_nt s6734c3f1;
  ::S5330C18_nt s6734c3f2;
  ::S5330C12_nt s6734c3f3;
  int s6734c3f4;
  ::S21714C10_nt s6734c3f5;
  void *s6734c3f6[2];
  void  mf6734c3(); // _ZN7S6734C38mf6734c3Ev
};
//SIG(-1 S6734C3) C1{ m Fp FC2{ m FC3{ m Fp Fi FC4{ m}} Fi} FC2 FC5{ m FC6{ m FL[2]}} Fi FC7{ m Fp Fi FC8{ m}} Fp[2]}


void  S6734C3 ::mf6734c3(){}

static void Test_S6734C3()
{
  {
    init_simple_test("S6734C3");
    S6734C3 lv;
    check2(sizeof(lv), ABISELECT(112,76), "sizeof(S6734C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6734C3)");
    check_field_offset(lv, s6734c3f0, 0, "S6734C3.s6734c3f0");
    check_field_offset(lv, s6734c3f1, ABISELECT(8,4), "S6734C3.s6734c3f1");
    check_field_offset(lv, s6734c3f2, ABISELECT(32,20), "S6734C3.s6734c3f2");
    check_field_offset(lv, s6734c3f3, ABISELECT(56,36), "S6734C3.s6734c3f3");
    check_field_offset(lv, s6734c3f4, ABISELECT(72,52), "S6734C3.s6734c3f4");
    check_field_offset(lv, s6734c3f5, ABISELECT(80,56), "S6734C3.s6734c3f5");
    check_field_offset(lv, s6734c3f6, ABISELECT(96,68), "S6734C3.s6734c3f6");
  }
}
static Arrange_To_Call_Me vS6734C3(Test_S6734C3, "S6734C3", ABISELECT(112,76));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6734C1  : S6734C2 {
  ::S6734C3 s6734c1f0;
  virtual void  v1(); // _ZN7S6734C12v1Ev
  virtual void  v2(); // _ZN7S6734C12v2Ev
  ~S6734C1(); // tgen
  S6734C1(); // tgen
};
//SIG(1 S6734C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m Fp FC4{ m FC5{ m Fp Fi FC6{ m}} Fi} FC4 FC7{ m FC8{ m FL[2]}} Fi FC9{ m Fp Fi FC10{ m}} Fp[2]}}


void  S6734C1 ::v1(){vfunc_called(this, "_ZN7S6734C12v1Ev");}
void  S6734C1 ::v2(){vfunc_called(this, "_ZN7S6734C12v2Ev");}
S6734C1 ::~S6734C1(){ note_dtor("S6734C1", this);} // tgen
S6734C1 ::S6734C1(){ note_ctor("S6734C1", this);} // tgen

static void Test_S6734C1()
{
  extern Class_Descriptor cd_S6734C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,21)];
    init_test(&cd_S6734C1, buf);
    S6734C1 *dp, &lv = *(dp=new (buf) S6734C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,80), "sizeof(S6734C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6734C1)");
    check_base_class_offset(lv, (S6734C2*), 0, "S6734C1");
    check_field_offset(lv, s6734c1f0, ABISELECT(8,4), "S6734C1.s6734c1f0");
    test_class_info(&lv, &cd_S6734C1);
    dp->~S6734C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6734C1(Test_S6734C1, "S6734C1", ABISELECT(120,80));

#else // __cplusplus

extern void _ZN7S6734C1C1Ev();
extern void _ZN7S6734C1D1Ev();
Name_Map name_map_S6734C1[] = {
  NSPAIR(_ZN7S6734C1C1Ev),
  NSPAIR(_ZN7S6734C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6734C2;
extern VTBL_ENTRY _ZTI7S6734C2[];
extern  VTBL_ENTRY _ZTV7S6734C2[];
static Base_Class bases_S6734C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6734C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6734C1[];
extern void _ZN7S6734C1D1Ev();
extern void _ZN7S6734C1D0Ev();
extern void _ZN7S6734C22v3Ev();
extern void _ZN7S6734C22v4Ev();
extern void _ZN7S6734C12v1Ev();
extern void _ZN7S6734C12v2Ev();
static  VTBL_ENTRY vtc_S6734C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6734C1[0]),
  (VTBL_ENTRY)&_ZN7S6734C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6734C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6734C22v3Ev,
  (VTBL_ENTRY)&_ZN7S6734C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6734C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6734C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S6734C1[];
extern  VTBL_ENTRY _ZTV7S6734C1[];
Class_Descriptor cd_S6734C1 = {  "S6734C1", // class name
  bases_S6734C1, 1,
  &(vtc_S6734C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,80), // object size
  NSPAIRA(_ZTI7S6734C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6734C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9274C2  {
  ::S21714C10_nt s9274c2f0;
  int s9274c2f1[2];
  char s9274c2f2;
  virtual  ~S9274C2(); // _ZN7S9274C2D1Ev
  virtual void  v3(); // _ZN7S9274C22v3Ev
  virtual void  v4(); // _ZN7S9274C22v4Ev
  virtual void  v5(); // _ZN7S9274C22v5Ev
  S9274C2(); // tgen
};
//SIG(-1 S9274C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9274C2 ::~S9274C2(){ note_dtor("S9274C2", this);}
void  S9274C2 ::v3(){vfunc_called(this, "_ZN7S9274C22v3Ev");}
void  S9274C2 ::v4(){vfunc_called(this, "_ZN7S9274C22v4Ev");}
void  S9274C2 ::v5(){vfunc_called(this, "_ZN7S9274C22v5Ev");}
S9274C2 ::S9274C2(){ note_ctor("S9274C2", this);} // tgen

static void Test_S9274C2()
{
  extern Class_Descriptor cd_S9274C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9274C2, buf);
    S9274C2 *dp, &lv = *(dp=new (buf) S9274C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9274C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9274C2)");
    check_field_offset(lv, s9274c2f0, ABISELECT(8,4), "S9274C2.s9274c2f0");
    check_field_offset(lv, s9274c2f1, ABISELECT(24,16), "S9274C2.s9274c2f1");
    check_field_offset(lv, s9274c2f2, ABISELECT(32,24), "S9274C2.s9274c2f2");
    test_class_info(&lv, &cd_S9274C2);
    dp->~S9274C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9274C2(Test_S9274C2, "S9274C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9274C2C1Ev();
extern void _ZN7S9274C2D1Ev();
Name_Map name_map_S9274C2[] = {
  NSPAIR(_ZN7S9274C2C1Ev),
  NSPAIR(_ZN7S9274C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9274C2[];
extern void _ZN7S9274C2D1Ev();
extern void _ZN7S9274C2D0Ev();
extern void _ZN7S9274C22v3Ev();
extern void _ZN7S9274C22v4Ev();
extern void _ZN7S9274C22v5Ev();
static  VTBL_ENTRY vtc_S9274C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9274C2[0]),
  (VTBL_ENTRY)&_ZN7S9274C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9274C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9274C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9274C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9274C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9274C2[];
extern  VTBL_ENTRY _ZTV7S9274C2[];
Class_Descriptor cd_S9274C2 = {  "S9274C2", // class name
  0,0,//no base classes
  &(vtc_S9274C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9274C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9274C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9274C1  : S9274C2 {
  ::S21714C10_nt s9274c1f0;
  ::S21714C10_nt s9274c1f1;
  void *s9274c1f2;
  ::S9538C14_nt s9274c1f3;
  __tsi64 s9274c1f4[2];
  virtual  ~S9274C1(); // _ZN7S9274C1D1Ev
  virtual void  v1(); // _ZN7S9274C12v1Ev
  virtual void  v2(); // _ZN7S9274C12v2Ev
  S9274C1(); // tgen
};
//SIG(1 S9274C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 FC3 FC3 Fp FC5{ m Fp Fi[2] FC4} FL[2]}


 S9274C1 ::~S9274C1(){ note_dtor("S9274C1", this);}
void  S9274C1 ::v1(){vfunc_called(this, "_ZN7S9274C12v1Ev");}
void  S9274C1 ::v2(){vfunc_called(this, "_ZN7S9274C12v2Ev");}
S9274C1 ::S9274C1(){ note_ctor("S9274C1", this);} // tgen

static void Test_S9274C1()
{
  extern Class_Descriptor cd_S9274C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,23)];
    init_test(&cd_S9274C1, buf);
    S9274C1 *dp, &lv = *(dp=new (buf) S9274C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,88), "sizeof(S9274C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9274C1)");
    check_base_class_offset(lv, (S9274C2*), 0, "S9274C1");
    check_field_offset(lv, s9274c1f0, ABISELECT(40,28), "S9274C1.s9274c1f0");
    check_field_offset(lv, s9274c1f1, ABISELECT(56,40), "S9274C1.s9274c1f1");
    check_field_offset(lv, s9274c1f2, ABISELECT(72,52), "S9274C1.s9274c1f2");
    check_field_offset(lv, s9274c1f3, ABISELECT(80,56), "S9274C1.s9274c1f3");
    check_field_offset(lv, s9274c1f4, ABISELECT(104,72), "S9274C1.s9274c1f4");
    test_class_info(&lv, &cd_S9274C1);
    dp->~S9274C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9274C1(Test_S9274C1, "S9274C1", ABISELECT(120,88));

#else // __cplusplus

extern void _ZN7S9274C1C1Ev();
extern void _ZN7S9274C1D1Ev();
Name_Map name_map_S9274C1[] = {
  NSPAIR(_ZN7S9274C1C1Ev),
  NSPAIR(_ZN7S9274C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9274C2;
extern VTBL_ENTRY _ZTI7S9274C2[];
extern  VTBL_ENTRY _ZTV7S9274C2[];
static Base_Class bases_S9274C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9274C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9274C1[];
extern void _ZN7S9274C1D1Ev();
extern void _ZN7S9274C1D0Ev();
extern void _ZN7S9274C22v3Ev();
extern void _ZN7S9274C22v4Ev();
extern void _ZN7S9274C22v5Ev();
extern void _ZN7S9274C12v1Ev();
extern void _ZN7S9274C12v2Ev();
static  VTBL_ENTRY vtc_S9274C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9274C1[0]),
  (VTBL_ENTRY)&_ZN7S9274C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9274C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9274C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9274C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9274C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9274C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9274C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9274C1[];
extern  VTBL_ENTRY _ZTV7S9274C1[];
Class_Descriptor cd_S9274C1 = {  "S9274C1", // class name
  bases_S9274C1, 1,
  &(vtc_S9274C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,88), // object size
  NSPAIRA(_ZTI7S9274C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9274C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13896C1  {
  __tsu64 s13896c1f0:1;
  __tsi64 s13896c1f1:3;
  __tsi64 s13896c1f2:3;
  __tsu64 s13896c1f3:1;
  __tsi64 s13896c1f4:8;
  __tsu64 s13896c1f5:1;
  __tsi64 s13896c1f6:7;
  __tsi64 s13896c1f7:8;
  __tsu64 s13896c1f8:1;
  __tsi64 s13896c1f9:7;
  __tsi64 s13896c1f10:8;
  __tsu64 s13896c1f11:1;
  __tsi64 s13896c1f12:7;
  __tsi64 s13896c1f13:8;
  char s13896c1f14:4;
  char s13896c1f15:2;
  unsigned char s13896c1f16:1;
  unsigned char s13896c1f17:1;
};
//SIG(1 S13896C1) C1{ FL:1 FL:3 FL:3 FL:1 FL:8 FL:1 FL:7 FL:8 FL:1 FL:7 FL:8 FL:1 FL:7 FL:8 Fc:4 Fc:2 Fc:1 Fc:1}



static void Test_S13896C1()
{
  {
    init_simple_test("S13896C1");
    static S13896C1 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S13896C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13896C1)");
    set_bf_and_test(lv, s13896c1f0, 0, 0, 1, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f1, 0, 1, 3, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f1, 0, 1, 3, hide_sll(1LL<<2), "S13896C1");
    set_bf_and_test(lv, s13896c1f2, 0, 4, 3, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f2, 0, 4, 3, hide_sll(1LL<<2), "S13896C1");
    set_bf_and_test(lv, s13896c1f3, 0, 7, 1, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f4, 1, 0, 8, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f4, 1, 0, 8, hide_sll(1LL<<7), "S13896C1");
    set_bf_and_test(lv, s13896c1f5, 2, 0, 1, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f6, 2, 1, 7, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f6, 2, 1, 7, hide_sll(1LL<<6), "S13896C1");
    set_bf_and_test(lv, s13896c1f7, 3, 0, 8, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f7, 3, 0, 8, hide_sll(1LL<<7), "S13896C1");
    set_bf_and_test(lv, s13896c1f8, 4, 0, 1, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f9, 4, 1, 7, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f9, 4, 1, 7, hide_sll(1LL<<6), "S13896C1");
    set_bf_and_test(lv, s13896c1f10, 5, 0, 8, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f10, 5, 0, 8, hide_sll(1LL<<7), "S13896C1");
    set_bf_and_test(lv, s13896c1f11, 6, 0, 1, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f12, 6, 1, 7, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f12, 6, 1, 7, hide_sll(1LL<<6), "S13896C1");
    set_bf_and_test(lv, s13896c1f13, 7, 0, 8, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f13, 7, 0, 8, hide_sll(1LL<<7), "S13896C1");
    set_bf_and_test(lv, s13896c1f14, 8, 0, 4, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f14, 8, 0, 4, hide_sll(1LL<<3), "S13896C1");
    set_bf_and_test(lv, s13896c1f15, 8, 4, 2, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f15, 8, 4, 2, hide_sll(1LL<<1), "S13896C1");
    set_bf_and_test(lv, s13896c1f16, 8, 6, 1, 1, "S13896C1");
    set_bf_and_test(lv, s13896c1f17, 8, 7, 1, 1, "S13896C1");
  }
}
static Arrange_To_Call_Me vS13896C1(Test_S13896C1, "S13896C1", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9061C2  {
  virtual  ~S9061C2(); // _ZN7S9061C2D1Ev
  virtual void  v2(); // _ZN7S9061C22v2Ev
  S9061C2(); // tgen
};
//SIG(-1 S9061C2) C1{ vd v1}


 S9061C2 ::~S9061C2(){ note_dtor("S9061C2", this);}
void  S9061C2 ::v2(){vfunc_called(this, "_ZN7S9061C22v2Ev");}
S9061C2 ::S9061C2(){ note_ctor("S9061C2", this);} // tgen

static void Test_S9061C2()
{
  extern Class_Descriptor cd_S9061C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9061C2, buf);
    S9061C2 *dp, &lv = *(dp=new (buf) S9061C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9061C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9061C2)");
    test_class_info(&lv, &cd_S9061C2);
    dp->~S9061C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9061C2(Test_S9061C2, "S9061C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9061C2C1Ev();
extern void _ZN7S9061C2D1Ev();
Name_Map name_map_S9061C2[] = {
  NSPAIR(_ZN7S9061C2C1Ev),
  NSPAIR(_ZN7S9061C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9061C2[];
extern void _ZN7S9061C2D1Ev();
extern void _ZN7S9061C2D0Ev();
extern void _ZN7S9061C22v2Ev();
static  VTBL_ENTRY vtc_S9061C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9061C2[0]),
  (VTBL_ENTRY)&_ZN7S9061C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9061C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9061C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S9061C2[];
extern  VTBL_ENTRY _ZTV7S9061C2[];
Class_Descriptor cd_S9061C2 = {  "S9061C2", // class name
  0,0,//no base classes
  &(vtc_S9061C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9061C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9061C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9061C3_nt  {
  __tsi64 s9061c3f0[4];
  void  mf9061c3(); // _ZN10S9061C3_nt8mf9061c3Ev
};
//SIG(-1 S9061C3_nt) C1{ m FL[4]}


void  S9061C3_nt ::mf9061c3(){}

//skip512 S9061C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9061C5_nt  {
  int s9061c5f0;
  __tsi64 s9061c5f1;
  int s9061c5f2[2];
  ::S8663C10_nt s9061c5f3;
  ::S3432C14_nt s9061c5f4;
  void  mf9061c5(); // _ZN10S9061C5_nt8mf9061c5Ev
};
//SIG(-1 S9061C5_nt) C1{ m Fi FL Fi[2] FC2{ m Fi[4]} FC3{ m Fi[2]}}


void  S9061C5_nt ::mf9061c5(){}

//skip512 S9061C5_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9061C1  : S9061C2 {
  ::S9061C3_nt s9061c1f0;
  ::S7924C15_nt s9061c1f1;
  ::S9061C5_nt s9061c1f2;
  void *s9061c1f3;
  char s9061c1f4;
  void *s9061c1f5;
  virtual  ~S9061C1(); // _ZN7S9061C1D1Ev
  virtual void  v1(); // _ZN7S9061C12v1Ev
  S9061C1(); // tgen
};
//SIG(1 S9061C1) C1{ BC2{ vd v2} vd v1 FC3{ m FL[4]} FC4{ m Fp} FC5{ m Fi FL Fi[2] FC6{ m Fi[4]} FC7{ m Fi[2]}} Fp Fc Fp}


 S9061C1 ::~S9061C1(){ note_dtor("S9061C1", this);}
void  S9061C1 ::v1(){vfunc_called(this, "_ZN7S9061C12v1Ev");}
S9061C1 ::S9061C1(){ note_ctor("S9061C1", this);} // tgen

static void Test_S9061C1()
{
  extern Class_Descriptor cd_S9061C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,25)];
    init_test(&cd_S9061C1, buf);
    S9061C1 *dp, &lv = *(dp=new (buf) S9061C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,96), "sizeof(S9061C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9061C1)");
    check_base_class_offset(lv, (S9061C2*), 0, "S9061C1");
    check_field_offset(lv, s9061c1f0, ABISELECT(8,4), "S9061C1.s9061c1f0");
    check_field_offset(lv, s9061c1f1, ABISELECT(40,36), "S9061C1.s9061c1f1");
    check_field_offset(lv, s9061c1f2, ABISELECT(48,40), "S9061C1.s9061c1f2");
    check_field_offset(lv, s9061c1f3, ABISELECT(96,84), "S9061C1.s9061c1f3");
    check_field_offset(lv, s9061c1f4, ABISELECT(104,88), "S9061C1.s9061c1f4");
    check_field_offset(lv, s9061c1f5, ABISELECT(112,92), "S9061C1.s9061c1f5");
    test_class_info(&lv, &cd_S9061C1);
    dp->~S9061C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9061C1(Test_S9061C1, "S9061C1", ABISELECT(120,96));

#else // __cplusplus

extern void _ZN7S9061C1C1Ev();
extern void _ZN7S9061C1D1Ev();
Name_Map name_map_S9061C1[] = {
  NSPAIR(_ZN7S9061C1C1Ev),
  NSPAIR(_ZN7S9061C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9061C2;
extern VTBL_ENTRY _ZTI7S9061C2[];
extern  VTBL_ENTRY _ZTV7S9061C2[];
static Base_Class bases_S9061C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9061C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9061C1[];
extern void _ZN7S9061C1D1Ev();
extern void _ZN7S9061C1D0Ev();
extern void _ZN7S9061C22v2Ev();
extern void _ZN7S9061C12v1Ev();
static  VTBL_ENTRY vtc_S9061C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9061C1[0]),
  (VTBL_ENTRY)&_ZN7S9061C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9061C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9061C22v2Ev,
  (VTBL_ENTRY)&_ZN7S9061C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S9061C1[];
extern  VTBL_ENTRY _ZTV7S9061C1[];
Class_Descriptor cd_S9061C1 = {  "S9061C1", // class name
  bases_S9061C1, 1,
  &(vtc_S9061C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(120,96), // object size
  NSPAIRA(_ZTI7S9061C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9061C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4778C3  {
  ::S21714C10_nt s4778c3f0;
  int s4778c3f1[2];
  char s4778c3f2;
  virtual  ~S4778C3(); // _ZN7S4778C3D1Ev
  virtual void  v3(); // _ZN7S4778C32v3Ev
  virtual void  v4(); // _ZN7S4778C32v4Ev
  virtual void  v5(); // _ZN7S4778C32v5Ev
  S4778C3(); // tgen
};
//SIG(-1 S4778C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4778C3 ::~S4778C3(){ note_dtor("S4778C3", this);}
void  S4778C3 ::v3(){vfunc_called(this, "_ZN7S4778C32v3Ev");}
void  S4778C3 ::v4(){vfunc_called(this, "_ZN7S4778C32v4Ev");}
void  S4778C3 ::v5(){vfunc_called(this, "_ZN7S4778C32v5Ev");}
S4778C3 ::S4778C3(){ note_ctor("S4778C3", this);} // tgen

static void Test_S4778C3()
{
  extern Class_Descriptor cd_S4778C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4778C3, buf);
    S4778C3 *dp, &lv = *(dp=new (buf) S4778C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4778C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4778C3)");
    check_field_offset(lv, s4778c3f0, ABISELECT(8,4), "S4778C3.s4778c3f0");
    check_field_offset(lv, s4778c3f1, ABISELECT(24,16), "S4778C3.s4778c3f1");
    check_field_offset(lv, s4778c3f2, ABISELECT(32,24), "S4778C3.s4778c3f2");
    test_class_info(&lv, &cd_S4778C3);
    dp->~S4778C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4778C3(Test_S4778C3, "S4778C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4778C3C1Ev();
extern void _ZN7S4778C3D1Ev();
Name_Map name_map_S4778C3[] = {
  NSPAIR(_ZN7S4778C3C1Ev),
  NSPAIR(_ZN7S4778C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4778C3[];
extern void _ZN7S4778C3D1Ev();
extern void _ZN7S4778C3D0Ev();
extern void _ZN7S4778C32v3Ev();
extern void _ZN7S4778C32v4Ev();
extern void _ZN7S4778C32v5Ev();
static  VTBL_ENTRY vtc_S4778C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4778C3[0]),
  (VTBL_ENTRY)&_ZN7S4778C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4778C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4778C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4778C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4778C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4778C3[];
extern  VTBL_ENTRY _ZTV7S4778C3[];
Class_Descriptor cd_S4778C3 = {  "S4778C3", // class name
  0,0,//no base classes
  &(vtc_S4778C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4778C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4778C3),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4778C2  : S4778C3 {
  void *s4778c2f0;
  virtual void  v6(); // _ZN7S4778C22v6Ev
  virtual void  v7(); // _ZN7S4778C22v7Ev
  ~S4778C2(); // tgen
  S4778C2(); // tgen
};
//SIG(-1 S4778C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4778C2 ::v6(){vfunc_called(this, "_ZN7S4778C22v6Ev");}
void  S4778C2 ::v7(){vfunc_called(this, "_ZN7S4778C22v7Ev");}
S4778C2 ::~S4778C2(){ note_dtor("S4778C2", this);} // tgen
S4778C2 ::S4778C2(){ note_ctor("S4778C2", this);} // tgen

static void Test_S4778C2()
{
  extern Class_Descriptor cd_S4778C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4778C2, buf);
    S4778C2 *dp, &lv = *(dp=new (buf) S4778C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4778C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4778C2)");
    check_base_class_offset(lv, (S4778C3*), 0, "S4778C2");
    check_field_offset(lv, s4778c2f0, ABISELECT(40,28), "S4778C2.s4778c2f0");
    test_class_info(&lv, &cd_S4778C2);
    dp->~S4778C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4778C2(Test_S4778C2, "S4778C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4778C2C1Ev();
extern void _ZN7S4778C2D1Ev();
Name_Map name_map_S4778C2[] = {
  NSPAIR(_ZN7S4778C2C1Ev),
  NSPAIR(_ZN7S4778C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4778C3;
extern VTBL_ENTRY _ZTI7S4778C3[];
extern  VTBL_ENTRY _ZTV7S4778C3[];
static Base_Class bases_S4778C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4778C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4778C2[];
extern void _ZN7S4778C2D1Ev();
extern void _ZN7S4778C2D0Ev();
extern void _ZN7S4778C32v3Ev();
extern void _ZN7S4778C32v4Ev();
extern void _ZN7S4778C32v5Ev();
extern void _ZN7S4778C22v6Ev();
extern void _ZN7S4778C22v7Ev();
static  VTBL_ENTRY vtc_S4778C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4778C2[0]),
  (VTBL_ENTRY)&_ZN7S4778C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4778C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4778C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4778C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4778C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4778C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4778C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4778C2[];
extern  VTBL_ENTRY _ZTV7S4778C2[];
Class_Descriptor cd_S4778C2 = {  "S4778C2", // class name
  bases_S4778C2, 1,
  &(vtc_S4778C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4778C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4778C2),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4778C1  : S4778C2 {
  ::S7924C15_nt s4778c1f0;
  void *s4778c1f1[2];
  int s4778c1f2[2];
  virtual  ~S4778C1(); // _ZN7S4778C1D1Ev
  virtual void  v1(); // _ZN7S4778C12v1Ev
  virtual void  v2(); // _ZN7S4778C12v2Ev
  S4778C1(); // tgen
};
//SIG(1 S4778C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ m Fp} Fp[2] Fi[2]}


 S4778C1 ::~S4778C1(){ note_dtor("S4778C1", this);}
void  S4778C1 ::v1(){vfunc_called(this, "_ZN7S4778C12v1Ev");}
void  S4778C1 ::v2(){vfunc_called(this, "_ZN7S4778C12v2Ev");}
S4778C1 ::S4778C1(){ note_ctor("S4778C1", this);} // tgen

static void Test_S4778C1()
{
  extern Class_Descriptor cd_S4778C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S4778C1, buf);
    S4778C1 *dp, &lv = *(dp=new (buf) S4778C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S4778C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4778C1)");
    check_base_class_offset(lv, (S4778C3*)(S4778C2*), 0, "S4778C1");
    check_base_class_offset(lv, (S4778C2*), 0, "S4778C1");
    check_field_offset(lv, s4778c1f0, ABISELECT(48,32), "S4778C1.s4778c1f0");
    check_field_offset(lv, s4778c1f1, ABISELECT(56,36), "S4778C1.s4778c1f1");
    check_field_offset(lv, s4778c1f2, ABISELECT(72,44), "S4778C1.s4778c1f2");
    test_class_info(&lv, &cd_S4778C1);
    dp->~S4778C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4778C1(Test_S4778C1, "S4778C1", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S4778C1C1Ev();
extern void _ZN7S4778C1D1Ev();
Name_Map name_map_S4778C1[] = {
  NSPAIR(_ZN7S4778C1C1Ev),
  NSPAIR(_ZN7S4778C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4778C3;
extern VTBL_ENTRY _ZTI7S4778C3[];
extern  VTBL_ENTRY _ZTV7S4778C3[];
extern Class_Descriptor cd_S4778C2;
extern VTBL_ENTRY _ZTI7S4778C2[];
extern  VTBL_ENTRY _ZTV7S4778C2[];
static Base_Class bases_S4778C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4778C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4778C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4778C1[];
extern void _ZN7S4778C1D1Ev();
extern void _ZN7S4778C1D0Ev();
extern void _ZN7S4778C32v3Ev();
extern void _ZN7S4778C32v4Ev();
extern void _ZN7S4778C32v5Ev();
extern void _ZN7S4778C22v6Ev();
extern void _ZN7S4778C22v7Ev();
extern void _ZN7S4778C12v1Ev();
extern void _ZN7S4778C12v2Ev();
static  VTBL_ENTRY vtc_S4778C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4778C1[0]),
  (VTBL_ENTRY)&_ZN7S4778C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4778C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4778C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4778C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4778C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4778C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4778C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4778C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4778C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4778C1[];
extern  VTBL_ENTRY _ZTV7S4778C1[];
Class_Descriptor cd_S4778C1 = {  "S4778C1", // class name
  bases_S4778C1, 2,
  &(vtc_S4778C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S4778C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4778C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9393C2  {
  ::S21714C10_nt s9393c2f0;
  int s9393c2f1[2];
  char s9393c2f2;
  virtual  ~S9393C2(); // _ZN7S9393C2D1Ev
  virtual void  v3(); // _ZN7S9393C22v3Ev
  virtual void  v4(); // _ZN7S9393C22v4Ev
  virtual void  v5(); // _ZN7S9393C22v5Ev
  S9393C2(); // tgen
};
//SIG(-1 S9393C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9393C2 ::~S9393C2(){ note_dtor("S9393C2", this);}
void  S9393C2 ::v3(){vfunc_called(this, "_ZN7S9393C22v3Ev");}
void  S9393C2 ::v4(){vfunc_called(this, "_ZN7S9393C22v4Ev");}
void  S9393C2 ::v5(){vfunc_called(this, "_ZN7S9393C22v5Ev");}
S9393C2 ::S9393C2(){ note_ctor("S9393C2", this);} // tgen

static void Test_S9393C2()
{
  extern Class_Descriptor cd_S9393C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9393C2, buf);
    S9393C2 *dp, &lv = *(dp=new (buf) S9393C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9393C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9393C2)");
    check_field_offset(lv, s9393c2f0, ABISELECT(8,4), "S9393C2.s9393c2f0");
    check_field_offset(lv, s9393c2f1, ABISELECT(24,16), "S9393C2.s9393c2f1");
    check_field_offset(lv, s9393c2f2, ABISELECT(32,24), "S9393C2.s9393c2f2");
    test_class_info(&lv, &cd_S9393C2);
    dp->~S9393C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9393C2(Test_S9393C2, "S9393C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9393C2C1Ev();
extern void _ZN7S9393C2D1Ev();
Name_Map name_map_S9393C2[] = {
  NSPAIR(_ZN7S9393C2C1Ev),
  NSPAIR(_ZN7S9393C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9393C2[];
extern void _ZN7S9393C2D1Ev();
extern void _ZN7S9393C2D0Ev();
extern void _ZN7S9393C22v3Ev();
extern void _ZN7S9393C22v4Ev();
extern void _ZN7S9393C22v5Ev();
static  VTBL_ENTRY vtc_S9393C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9393C2[0]),
  (VTBL_ENTRY)&_ZN7S9393C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9393C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9393C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9393C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9393C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9393C2[];
extern  VTBL_ENTRY _ZTV7S9393C2[];
Class_Descriptor cd_S9393C2 = {  "S9393C2", // class name
  0,0,//no base classes
  &(vtc_S9393C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9393C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9393C2),7, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9393C1  : S9393C2 {
  void *s9393c1f0[2];
  ::S5330C25 s9393c1f1;
  virtual  ~S9393C1(); // _ZN7S9393C1D1Ev
  virtual void  v1(); // _ZN7S9393C12v1Ev
  virtual void  v2(); // _ZN7S9393C12v2Ev
  S9393C1(); // tgen
};
//SIG(1 S9393C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fp[2] FC5{ m Fp Fi FC6{ m} FC6}}


 S9393C1 ::~S9393C1(){ note_dtor("S9393C1", this);}
void  S9393C1 ::v1(){vfunc_called(this, "_ZN7S9393C12v1Ev");}
void  S9393C1 ::v2(){vfunc_called(this, "_ZN7S9393C12v2Ev");}
S9393C1 ::S9393C1(){ note_ctor("S9393C1", this);} // tgen

static void Test_S9393C1()
{
  extern Class_Descriptor cd_S9393C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S9393C1, buf);
    S9393C1 *dp, &lv = *(dp=new (buf) S9393C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S9393C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9393C1)");
    check_base_class_offset(lv, (S9393C2*), 0, "S9393C1");
    check_field_offset(lv, s9393c1f0, ABISELECT(40,28), "S9393C1.s9393c1f0");
    check_field_offset(lv, s9393c1f1, ABISELECT(56,36), "S9393C1.s9393c1f1");
    test_class_info(&lv, &cd_S9393C1);
    dp->~S9393C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9393C1(Test_S9393C1, "S9393C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S9393C1C1Ev();
extern void _ZN7S9393C1D1Ev();
Name_Map name_map_S9393C1[] = {
  NSPAIR(_ZN7S9393C1C1Ev),
  NSPAIR(_ZN7S9393C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9393C2;
extern VTBL_ENTRY _ZTI7S9393C2[];
extern  VTBL_ENTRY _ZTV7S9393C2[];
static Base_Class bases_S9393C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9393C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9393C1[];
extern void _ZN7S9393C1D1Ev();
extern void _ZN7S9393C1D0Ev();
extern void _ZN7S9393C22v3Ev();
extern void _ZN7S9393C22v4Ev();
extern void _ZN7S9393C22v5Ev();
extern void _ZN7S9393C12v1Ev();
extern void _ZN7S9393C12v2Ev();
static  VTBL_ENTRY vtc_S9393C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9393C1[0]),
  (VTBL_ENTRY)&_ZN7S9393C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9393C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9393C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9393C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9393C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9393C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9393C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9393C1[];
extern  VTBL_ENTRY _ZTV7S9393C1[];
Class_Descriptor cd_S9393C1 = {  "S9393C1", // class name
  bases_S9393C1, 1,
  &(vtc_S9393C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S9393C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9393C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3818C2  : S3817C3_nt {
  __tsi64 s3818c2f0;
  virtual  ~S3818C2(); // _ZN7S3818C2D1Ev
  virtual void  v2(); // _ZN7S3818C22v2Ev
  S3818C2(); // tgen
};
//SIG(-1 S3818C2) C1{ BC2{ vd m Fi} vd v1 FL}


 S3818C2 ::~S3818C2(){ note_dtor("S3818C2", this);}
void  S3818C2 ::v2(){vfunc_called(this, "_ZN7S3818C22v2Ev");}
S3818C2 ::S3818C2(){ note_ctor("S3818C2", this);} // tgen

static void Test_S3818C2()
{
  extern Class_Descriptor cd_S3818C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S3818C2, buf);
    S3818C2 *dp, &lv = *(dp=new (buf) S3818C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S3818C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3818C2)");
    check_base_class_offset(lv, (S3817C3_nt*), 0, "S3818C2");
    check_field_offset(lv, s3818c2f0, ABISELECT(16,8), "S3818C2.s3818c2f0");
    test_class_info(&lv, &cd_S3818C2);
    dp->~S3818C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3818C2(Test_S3818C2, "S3818C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S3818C2C1Ev();
extern void _ZN7S3818C2D1Ev();
Name_Map name_map_S3818C2[] = {
  NSPAIR(_ZN7S3818C2C1Ev),
  NSPAIR(_ZN7S3818C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3817C3_nt;
extern VTBL_ENTRY _ZTI10S3817C3_nt[];
extern  VTBL_ENTRY _ZTV10S3817C3_nt[];
static Base_Class bases_S3818C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3817C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3818C2[];
extern void _ZN7S3818C2D1Ev();
extern void _ZN7S3818C2D0Ev();
extern void _ZN7S3818C22v2Ev();
static  VTBL_ENTRY vtc_S3818C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3818C2[0]),
  (VTBL_ENTRY)&_ZN7S3818C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3818C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3818C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S3818C2[];
extern  VTBL_ENTRY _ZTV7S3818C2[];
Class_Descriptor cd_S3818C2 = {  "S3818C2", // class name
  bases_S3818C2, 1,
  &(vtc_S3818C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S3818C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3818C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3818C4  {
  __tsi64 s3818c4f0;
  int s3818c4f1;
  ::S21714C10_nt s3818c4f2;
  int s3818c4f3;
  __tsi64 s3818c4f4;
  ::S21714C10_nt s3818c4f5;
  char s3818c4f6;
  ::S21714C10_nt s3818c4f7;
  int s3818c4f8;
  ::S21714C10_nt s3818c4f9;
  void  mf3818c4(); // _ZN7S3818C48mf3818c4Ev
};
//SIG(-1 S3818C4) C1{ m FL Fi FC2{ m Fp Fi FC3{ m}} Fi FL FC2 Fc FC2 Fi FC2}


void  S3818C4 ::mf3818c4(){}

static void Test_S3818C4()
{
  {
    init_simple_test("S3818C4");
    S3818C4 lv;
    check2(sizeof(lv), ABISELECT(112,80), "sizeof(S3818C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3818C4)");
    check_field_offset(lv, s3818c4f0, 0, "S3818C4.s3818c4f0");
    check_field_offset(lv, s3818c4f1, 8, "S3818C4.s3818c4f1");
    check_field_offset(lv, s3818c4f2, ABISELECT(16,12), "S3818C4.s3818c4f2");
    check_field_offset(lv, s3818c4f3, ABISELECT(32,24), "S3818C4.s3818c4f3");
    check_field_offset(lv, s3818c4f4, ABISELECT(40,28), "S3818C4.s3818c4f4");
    check_field_offset(lv, s3818c4f5, ABISELECT(48,36), "S3818C4.s3818c4f5");
    check_field_offset(lv, s3818c4f6, ABISELECT(64,48), "S3818C4.s3818c4f6");
    check_field_offset(lv, s3818c4f7, ABISELECT(72,52), "S3818C4.s3818c4f7");
    check_field_offset(lv, s3818c4f8, ABISELECT(88,64), "S3818C4.s3818c4f8");
    check_field_offset(lv, s3818c4f9, ABISELECT(96,68), "S3818C4.s3818c4f9");
  }
}
static Arrange_To_Call_Me vS3818C4(Test_S3818C4, "S3818C4", ABISELECT(112,80));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3818C1  : S3818C2 {
  ::S3818C4 s3818c1f0;
  virtual void  v1(); // _ZN7S3818C12v1Ev
  ~S3818C1(); // tgen
  S3818C1(); // tgen
};
//SIG(1 S3818C1) C1{ BC2{ BC3{ vd m Fi} vd v2 FL} v1 FC4{ m FL Fi FC5{ m Fp Fi FC6{ m}} Fi FL FC5 Fc FC5 Fi FC5}}


void  S3818C1 ::v1(){vfunc_called(this, "_ZN7S3818C12v1Ev");}
S3818C1 ::~S3818C1(){ note_dtor("S3818C1", this);} // tgen
S3818C1 ::S3818C1(){ note_ctor("S3818C1", this);} // tgen

static void Test_S3818C1()
{
  extern Class_Descriptor cd_S3818C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,25)];
    init_test(&cd_S3818C1, buf);
    S3818C1 *dp, &lv = *(dp=new (buf) S3818C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,96), "sizeof(S3818C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3818C1)");
    check_base_class_offset(lv, (S3817C3_nt*)(S3818C2*), 0, "S3818C1");
    check_base_class_offset(lv, (S3818C2*), 0, "S3818C1");
    check_field_offset(lv, s3818c1f0, ABISELECT(24,16), "S3818C1.s3818c1f0");
    test_class_info(&lv, &cd_S3818C1);
    dp->~S3818C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3818C1(Test_S3818C1, "S3818C1", ABISELECT(136,96));

#else // __cplusplus

extern void _ZN7S3818C1C1Ev();
extern void _ZN7S3818C1D1Ev();
Name_Map name_map_S3818C1[] = {
  NSPAIR(_ZN7S3818C1C1Ev),
  NSPAIR(_ZN7S3818C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3817C3_nt;
extern VTBL_ENTRY _ZTI10S3817C3_nt[];
extern  VTBL_ENTRY _ZTV10S3817C3_nt[];
extern Class_Descriptor cd_S3818C2;
extern VTBL_ENTRY _ZTI7S3818C2[];
extern  VTBL_ENTRY _ZTV7S3818C2[];
static Base_Class bases_S3818C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3817C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3818C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3818C1[];
extern void _ZN7S3818C1D1Ev();
extern void _ZN7S3818C1D0Ev();
extern void _ZN7S3818C22v2Ev();
extern void _ZN7S3818C12v1Ev();
static  VTBL_ENTRY vtc_S3818C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3818C1[0]),
  (VTBL_ENTRY)&_ZN7S3818C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3818C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3818C22v2Ev,
  (VTBL_ENTRY)&_ZN7S3818C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S3818C1[];
extern  VTBL_ENTRY _ZTV7S3818C1[];
Class_Descriptor cd_S3818C1 = {  "S3818C1", // class name
  bases_S3818C1, 2,
  &(vtc_S3818C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,96), // object size
  NSPAIRA(_ZTI7S3818C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3818C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4025C2_nt  : S4055C3_nt {
  int s4025c2f0;
  char s4025c2f1[4];
  int s4025c2f2;
  void *s4025c2f3[2];
  virtual  ~S4025C2_nt(); // _ZN10S4025C2_ntD1Ev
  virtual void  v4(); // _ZN10S4025C2_nt2v4Ev
  virtual void  v5(); // _ZN10S4025C2_nt2v5Ev
  virtual void  v6(); // _ZN10S4025C2_nt2v6Ev
  virtual void  v7(); // _ZN10S4025C2_nt2v7Ev
  S4025C2_nt(); // tgen
};
//SIG(-1 S4025C2_nt) C1{ BC2{ vd m} vd v1 v2 v3 v4 Fi Fc[4] Fi Fp[2]}


 S4025C2_nt ::~S4025C2_nt(){ note_dtor("S4025C2_nt", this);}
void  S4025C2_nt ::v4(){vfunc_called(this, "_ZN10S4025C2_nt2v4Ev");}
void  S4025C2_nt ::v5(){vfunc_called(this, "_ZN10S4025C2_nt2v5Ev");}
void  S4025C2_nt ::v6(){vfunc_called(this, "_ZN10S4025C2_nt2v6Ev");}
void  S4025C2_nt ::v7(){vfunc_called(this, "_ZN10S4025C2_nt2v7Ev");}
S4025C2_nt ::S4025C2_nt(){ note_ctor("S4025C2_nt", this);} // tgen

//skip512 S4025C2_nt

#else // __cplusplus

extern void _ZN10S4025C2_ntC1Ev();
extern void _ZN10S4025C2_ntD1Ev();
Name_Map name_map_S4025C2_nt[] = {
  NSPAIR(_ZN10S4025C2_ntC1Ev),
  NSPAIR(_ZN10S4025C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S4025C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S4025C2_nt[];
extern void _ZN10S4025C2_ntD1Ev();
extern void _ZN10S4025C2_ntD0Ev();
extern void _ZN10S4025C2_nt2v4Ev();
extern void _ZN10S4025C2_nt2v5Ev();
extern void _ZN10S4025C2_nt2v6Ev();
extern void _ZN10S4025C2_nt2v7Ev();
static  VTBL_ENTRY vtc_S4025C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S4025C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S4025C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S4025C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S4025C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4025C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4025C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4025C2_nt2v7Ev,
};
extern VTBL_ENTRY _ZTI10S4025C2_nt[];
VTBL_ENTRY *P__ZTI10S4025C2_nt = _ZTI10S4025C2_nt; 
extern  VTBL_ENTRY _ZTV10S4025C2_nt[];
Class_Descriptor cd_S4025C2_nt = {  "S4025C2_nt", // class name
  bases_S4025C2_nt, 1,
  &(vtc_S4025C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI10S4025C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S4025C2_nt),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4025C1  : S4025C2_nt {
  void *s4025c1f0;
  int s4025c1f1;
  ::S8310C3 s4025c1f2;
  virtual  ~S4025C1(); // _ZN7S4025C1D1Ev
  virtual void  v1(); // _ZN7S4025C12v1Ev
  virtual void  v2(); // _ZN7S4025C12v2Ev
  virtual void  v3(); // _ZN7S4025C12v3Ev
  S4025C1(); // tgen
};
//SIG(1 S4025C1) C1{ BC2{ BC3{ vd m} vd v4 v5 v6 v7 Fi Fc[4] Fi Fp[2]} vd v1 v2 v3 Fp Fi FC4{ m FC5{ Fc[12]}}}


 S4025C1 ::~S4025C1(){ note_dtor("S4025C1", this);}
void  S4025C1 ::v1(){vfunc_called(this, "_ZN7S4025C12v1Ev");}
void  S4025C1 ::v2(){vfunc_called(this, "_ZN7S4025C12v2Ev");}
void  S4025C1 ::v3(){vfunc_called(this, "_ZN7S4025C12v3Ev");}
S4025C1 ::S4025C1(){ note_ctor("S4025C1", this);} // tgen

static void Test_S4025C1()
{
  extern Class_Descriptor cd_S4025C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4025C1, buf);
    S4025C1 *dp, &lv = *(dp=new (buf) S4025C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4025C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4025C1)");
    check_base_class_offset(lv, (S4055C3_nt*)(S4025C2_nt*), 0, "S4025C1");
    check_base_class_offset(lv, (S4025C2_nt*), 0, "S4025C1");
    check_field_offset(lv, s4025c1f0, ABISELECT(40,24), "S4025C1.s4025c1f0");
    check_field_offset(lv, s4025c1f1, ABISELECT(48,28), "S4025C1.s4025c1f1");
    check_field_offset(lv, s4025c1f2, ABISELECT(52,32), "S4025C1.s4025c1f2");
    test_class_info(&lv, &cd_S4025C1);
    dp->~S4025C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4025C1(Test_S4025C1, "S4025C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4025C1C1Ev();
extern void _ZN7S4025C1D1Ev();
Name_Map name_map_S4025C1[] = {
  NSPAIR(_ZN7S4025C1C1Ev),
  NSPAIR(_ZN7S4025C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4025C2_nt;
extern VTBL_ENTRY _ZTI10S4025C2_nt[];
extern  VTBL_ENTRY _ZTV10S4025C2_nt[];
static Base_Class bases_S4025C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4025C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4025C1[];
extern void _ZN7S4025C1D1Ev();
extern void _ZN7S4025C1D0Ev();
extern void _ZN10S4025C2_nt2v4Ev();
extern void _ZN10S4025C2_nt2v5Ev();
extern void _ZN10S4025C2_nt2v6Ev();
extern void _ZN10S4025C2_nt2v7Ev();
extern void _ZN7S4025C12v1Ev();
extern void _ZN7S4025C12v2Ev();
extern void _ZN7S4025C12v3Ev();
static  VTBL_ENTRY vtc_S4025C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4025C1[0]),
  (VTBL_ENTRY)&_ZN7S4025C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4025C1D0Ev,
  (VTBL_ENTRY)&_ZN10S4025C2_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S4025C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S4025C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S4025C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN7S4025C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4025C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4025C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S4025C1[];
extern  VTBL_ENTRY _ZTV7S4025C1[];
Class_Descriptor cd_S4025C1 = {  "S4025C1", // class name
  bases_S4025C1, 2,
  &(vtc_S4025C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4025C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4025C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9541C2  {
  virtual  ~S9541C2(); // _ZN7S9541C2D1Ev
  virtual void  v3(); // _ZN7S9541C22v3Ev
  virtual void  v4(); // _ZN7S9541C22v4Ev
  S9541C2(); // tgen
};
//SIG(-1 S9541C2) C1{ vd v1 v2}


 S9541C2 ::~S9541C2(){ note_dtor("S9541C2", this);}
void  S9541C2 ::v3(){vfunc_called(this, "_ZN7S9541C22v3Ev");}
void  S9541C2 ::v4(){vfunc_called(this, "_ZN7S9541C22v4Ev");}
S9541C2 ::S9541C2(){ note_ctor("S9541C2", this);} // tgen

static void Test_S9541C2()
{
  extern Class_Descriptor cd_S9541C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9541C2, buf);
    S9541C2 *dp, &lv = *(dp=new (buf) S9541C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9541C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9541C2)");
    test_class_info(&lv, &cd_S9541C2);
    dp->~S9541C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9541C2(Test_S9541C2, "S9541C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9541C2C1Ev();
extern void _ZN7S9541C2D1Ev();
Name_Map name_map_S9541C2[] = {
  NSPAIR(_ZN7S9541C2C1Ev),
  NSPAIR(_ZN7S9541C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9541C2[];
extern void _ZN7S9541C2D1Ev();
extern void _ZN7S9541C2D0Ev();
extern void _ZN7S9541C22v3Ev();
extern void _ZN7S9541C22v4Ev();
static  VTBL_ENTRY vtc_S9541C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9541C2[0]),
  (VTBL_ENTRY)&_ZN7S9541C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9541C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9541C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9541C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9541C2[];
extern  VTBL_ENTRY _ZTV7S9541C2[];
Class_Descriptor cd_S9541C2 = {  "S9541C2", // class name
  0,0,//no base classes
  &(vtc_S9541C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9541C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9541C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9541C3  {
  ::S9538C12 s9541c3f0;
  __tsi64 s9541c3f1;
  int s9541c3f2;
  ::S9538C13 s9541c3f3;
  void  mf9541c3(); // _ZN7S9541C38mf9541c3Ev
};
//SIG(-1 S9541C3) C1{ m FC2{ m FL FC3{ m FC4{ m Fp Fi FC5{ m}} Fi FC4} Fi} FL Fi FC3}


void  S9541C3 ::mf9541c3(){}

static void Test_S9541C3()
{
  {
    init_simple_test("S9541C3");
    S9541C3 lv;
    check2(sizeof(lv), ABISELECT(112,80), "sizeof(S9541C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9541C3)");
    check_field_offset(lv, s9541c3f0, 0, "S9541C3.s9541c3f0");
    check_field_offset(lv, s9541c3f1, ABISELECT(56,40), "S9541C3.s9541c3f1");
    check_field_offset(lv, s9541c3f2, ABISELECT(64,48), "S9541C3.s9541c3f2");
    check_field_offset(lv, s9541c3f3, ABISELECT(72,52), "S9541C3.s9541c3f3");
  }
}
static Arrange_To_Call_Me vS9541C3(Test_S9541C3, "S9541C3", ABISELECT(112,80));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9541C1  : S9541C2 {
  ::S9541C3 s9541c1f0;
  void *s9541c1f1;
  virtual void  v1(); // _ZN7S9541C12v1Ev
  virtual void  v2(); // _ZN7S9541C12v2Ev
  ~S9541C1(); // tgen
  S9541C1(); // tgen
};
//SIG(1 S9541C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m FC4{ m FL FC5{ m FC6{ m Fp Fi FC7{ m}} Fi FC6} Fi} FL Fi FC5} Fp}


void  S9541C1 ::v1(){vfunc_called(this, "_ZN7S9541C12v1Ev");}
void  S9541C1 ::v2(){vfunc_called(this, "_ZN7S9541C12v2Ev");}
S9541C1 ::~S9541C1(){ note_dtor("S9541C1", this);} // tgen
S9541C1 ::S9541C1(){ note_ctor("S9541C1", this);} // tgen

static void Test_S9541C1()
{
  extern Class_Descriptor cd_S9541C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,23)];
    init_test(&cd_S9541C1, buf);
    S9541C1 *dp, &lv = *(dp=new (buf) S9541C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,88), "sizeof(S9541C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9541C1)");
    check_base_class_offset(lv, (S9541C2*), 0, "S9541C1");
    check_field_offset(lv, s9541c1f0, ABISELECT(8,4), "S9541C1.s9541c1f0");
    check_field_offset(lv, s9541c1f1, ABISELECT(120,84), "S9541C1.s9541c1f1");
    test_class_info(&lv, &cd_S9541C1);
    dp->~S9541C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9541C1(Test_S9541C1, "S9541C1", ABISELECT(128,88));

#else // __cplusplus

extern void _ZN7S9541C1C1Ev();
extern void _ZN7S9541C1D1Ev();
Name_Map name_map_S9541C1[] = {
  NSPAIR(_ZN7S9541C1C1Ev),
  NSPAIR(_ZN7S9541C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9541C2;
extern VTBL_ENTRY _ZTI7S9541C2[];
extern  VTBL_ENTRY _ZTV7S9541C2[];
static Base_Class bases_S9541C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9541C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9541C1[];
extern void _ZN7S9541C1D1Ev();
extern void _ZN7S9541C1D0Ev();
extern void _ZN7S9541C22v3Ev();
extern void _ZN7S9541C22v4Ev();
extern void _ZN7S9541C12v1Ev();
extern void _ZN7S9541C12v2Ev();
static  VTBL_ENTRY vtc_S9541C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9541C1[0]),
  (VTBL_ENTRY)&_ZN7S9541C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9541C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9541C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9541C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9541C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9541C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9541C1[];
extern  VTBL_ENTRY _ZTV7S9541C1[];
Class_Descriptor cd_S9541C1 = {  "S9541C1", // class name
  bases_S9541C1, 1,
  &(vtc_S9541C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,88), // object size
  NSPAIRA(_ZTI7S9541C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9541C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4024C2  : S4055C3_nt {
  int s4024c2f0;
  char s4024c2f1[4];
  int s4024c2f2;
  void *s4024c2f3[2];
  virtual  ~S4024C2(); // _ZN7S4024C2D1Ev
  virtual void  v4(); // _ZN7S4024C22v4Ev
  virtual void  v5(); // _ZN7S4024C22v5Ev
  virtual void  v6(); // _ZN7S4024C22v6Ev
  virtual void  v7(); // _ZN7S4024C22v7Ev
  S4024C2(); // tgen
};
//SIG(-1 S4024C2) C1{ BC2{ vd m} vd v1 v2 v3 v4 Fi Fc[4] Fi Fp[2]}


 S4024C2 ::~S4024C2(){ note_dtor("S4024C2", this);}
void  S4024C2 ::v4(){vfunc_called(this, "_ZN7S4024C22v4Ev");}
void  S4024C2 ::v5(){vfunc_called(this, "_ZN7S4024C22v5Ev");}
void  S4024C2 ::v6(){vfunc_called(this, "_ZN7S4024C22v6Ev");}
void  S4024C2 ::v7(){vfunc_called(this, "_ZN7S4024C22v7Ev");}
S4024C2 ::S4024C2(){ note_ctor("S4024C2", this);} // tgen

static void Test_S4024C2()
{
  extern Class_Descriptor cd_S4024C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S4024C2, buf);
    S4024C2 *dp, &lv = *(dp=new (buf) S4024C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S4024C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4024C2)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S4024C2");
    check_field_offset(lv, s4024c2f0, ABISELECT(8,4), "S4024C2.s4024c2f0");
    check_field_offset(lv, s4024c2f1, ABISELECT(12,8), "S4024C2.s4024c2f1");
    check_field_offset(lv, s4024c2f2, ABISELECT(16,12), "S4024C2.s4024c2f2");
    check_field_offset(lv, s4024c2f3, ABISELECT(24,16), "S4024C2.s4024c2f3");
    test_class_info(&lv, &cd_S4024C2);
    dp->~S4024C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4024C2(Test_S4024C2, "S4024C2", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN7S4024C2C1Ev();
extern void _ZN7S4024C2D1Ev();
Name_Map name_map_S4024C2[] = {
  NSPAIR(_ZN7S4024C2C1Ev),
  NSPAIR(_ZN7S4024C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S4024C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4024C2[];
extern void _ZN7S4024C2D1Ev();
extern void _ZN7S4024C2D0Ev();
extern void _ZN7S4024C22v4Ev();
extern void _ZN7S4024C22v5Ev();
extern void _ZN7S4024C22v6Ev();
extern void _ZN7S4024C22v7Ev();
static  VTBL_ENTRY vtc_S4024C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4024C2[0]),
  (VTBL_ENTRY)&_ZN7S4024C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4024C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4024C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4024C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4024C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4024C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4024C2[];
extern  VTBL_ENTRY _ZTV7S4024C2[];
Class_Descriptor cd_S4024C2 = {  "S4024C2", // class name
  bases_S4024C2, 1,
  &(vtc_S4024C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI7S4024C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4024C2),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4024C1  : S4024C2 {
  int s4024c1f0;
  ::S8310C3 s4024c1f1;
  void *s4024c1f2;
  virtual  ~S4024C1(); // _ZN7S4024C1D1Ev
  virtual void  v1(); // _ZN7S4024C12v1Ev
  virtual void  v2(); // _ZN7S4024C12v2Ev
  virtual void  v3(); // _ZN7S4024C12v3Ev
  S4024C1(); // tgen
};
//SIG(1 S4024C1) C1{ BC2{ BC3{ vd m} vd v4 v5 v6 v7 Fi Fc[4] Fi Fp[2]} vd v1 v2 v3 Fi FC4{ m FC5{ Fc[12]}} Fp}


 S4024C1 ::~S4024C1(){ note_dtor("S4024C1", this);}
void  S4024C1 ::v1(){vfunc_called(this, "_ZN7S4024C12v1Ev");}
void  S4024C1 ::v2(){vfunc_called(this, "_ZN7S4024C12v2Ev");}
void  S4024C1 ::v3(){vfunc_called(this, "_ZN7S4024C12v3Ev");}
S4024C1 ::S4024C1(){ note_ctor("S4024C1", this);} // tgen

static void Test_S4024C1()
{
  extern Class_Descriptor cd_S4024C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,12)];
    init_test(&cd_S4024C1, buf);
    S4024C1 *dp, &lv = *(dp=new (buf) S4024C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,44), "sizeof(S4024C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4024C1)");
    check_base_class_offset(lv, (S4055C3_nt*)(S4024C2*), 0, "S4024C1");
    check_base_class_offset(lv, (S4024C2*), 0, "S4024C1");
    check_field_offset(lv, s4024c1f0, ABISELECT(40,24), "S4024C1.s4024c1f0");
    check_field_offset(lv, s4024c1f1, ABISELECT(44,28), "S4024C1.s4024c1f1");
    check_field_offset(lv, s4024c1f2, ABISELECT(56,40), "S4024C1.s4024c1f2");
    test_class_info(&lv, &cd_S4024C1);
    dp->~S4024C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4024C1(Test_S4024C1, "S4024C1", ABISELECT(64,44));

#else // __cplusplus

extern void _ZN7S4024C1C1Ev();
extern void _ZN7S4024C1D1Ev();
Name_Map name_map_S4024C1[] = {
  NSPAIR(_ZN7S4024C1C1Ev),
  NSPAIR(_ZN7S4024C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4024C2;
extern VTBL_ENTRY _ZTI7S4024C2[];
extern  VTBL_ENTRY _ZTV7S4024C2[];
static Base_Class bases_S4024C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4024C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4024C1[];
extern void _ZN7S4024C1D1Ev();
extern void _ZN7S4024C1D0Ev();
extern void _ZN7S4024C22v4Ev();
extern void _ZN7S4024C22v5Ev();
extern void _ZN7S4024C22v6Ev();
extern void _ZN7S4024C22v7Ev();
extern void _ZN7S4024C12v1Ev();
extern void _ZN7S4024C12v2Ev();
extern void _ZN7S4024C12v3Ev();
static  VTBL_ENTRY vtc_S4024C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4024C1[0]),
  (VTBL_ENTRY)&_ZN7S4024C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4024C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4024C22v4Ev,
  (VTBL_ENTRY)&_ZN7S4024C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4024C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4024C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4024C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4024C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4024C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S4024C1[];
extern  VTBL_ENTRY _ZTV7S4024C1[];
Class_Descriptor cd_S4024C1 = {  "S4024C1", // class name
  bases_S4024C1, 2,
  &(vtc_S4024C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,44), // object size
  NSPAIRA(_ZTI7S4024C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4024C1),11, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4068C2  : S4055C3_nt {
  virtual  ~S4068C2(); // _ZN7S4068C2D1Ev
  virtual void  v2(); // _ZN7S4068C22v2Ev
  S4068C2(); // tgen
};
//SIG(-1 S4068C2) C1{ BC2{ vd m} vd v1}


 S4068C2 ::~S4068C2(){ note_dtor("S4068C2", this);}
void  S4068C2 ::v2(){vfunc_called(this, "_ZN7S4068C22v2Ev");}
S4068C2 ::S4068C2(){ note_ctor("S4068C2", this);} // tgen

static void Test_S4068C2()
{
  extern Class_Descriptor cd_S4068C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4068C2, buf);
    S4068C2 *dp, &lv = *(dp=new (buf) S4068C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4068C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4068C2)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S4068C2");
    test_class_info(&lv, &cd_S4068C2);
    dp->~S4068C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4068C2(Test_S4068C2, "S4068C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4068C2C1Ev();
extern void _ZN7S4068C2D1Ev();
Name_Map name_map_S4068C2[] = {
  NSPAIR(_ZN7S4068C2C1Ev),
  NSPAIR(_ZN7S4068C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S4068C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4068C2[];
extern void _ZN7S4068C2D1Ev();
extern void _ZN7S4068C2D0Ev();
extern void _ZN7S4068C22v2Ev();
static  VTBL_ENTRY vtc_S4068C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4068C2[0]),
  (VTBL_ENTRY)&_ZN7S4068C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4068C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4068C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4068C2[];
extern  VTBL_ENTRY _ZTV7S4068C2[];
Class_Descriptor cd_S4068C2 = {  "S4068C2", // class name
  bases_S4068C2, 1,
  &(vtc_S4068C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4068C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4068C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4068C5  {
  int s4068c5f0[5];
  short s4068c5f1[2];
  __tsi64 s4068c5f2;
  char s4068c5f3[84];
  int s4068c5f4;
};
//SIG(-1 S4068C5) C1{ Fi[5] Fs[2] FL Fc[84] Fi}



static void Test_S4068C5()
{
  {
    init_simple_test("S4068C5");
    S4068C5 lv;
    check2(sizeof(lv), 120, "sizeof(S4068C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4068C5)");
    check_field_offset(lv, s4068c5f0, 0, "S4068C5.s4068c5f0");
    check_field_offset(lv, s4068c5f1, 20, "S4068C5.s4068c5f1");
    check_field_offset(lv, s4068c5f2, 24, "S4068C5.s4068c5f2");
    check_field_offset(lv, s4068c5f3, 32, "S4068C5.s4068c5f3");
    check_field_offset(lv, s4068c5f4, 116, "S4068C5.s4068c5f4");
  }
}
static Arrange_To_Call_Me vS4068C5(Test_S4068C5, "S4068C5", 120);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4068C6  {
  ::S4068C5 s4068c6f0;
  char s4068c6f1[64];
};
//SIG(-1 S4068C6) C1{ FC2{ Fi[5] Fs[2] FL Fc[84] Fi} Fc[64]}



static void Test_S4068C6()
{
  {
    init_simple_test("S4068C6");
    S4068C6 lv;
    check2(sizeof(lv), 184, "sizeof(S4068C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4068C6)");
    check_field_offset(lv, s4068c6f0, 0, "S4068C6.s4068c6f0");
    check_field_offset(lv, s4068c6f1, 120, "S4068C6.s4068c6f1");
  }
}
static Arrange_To_Call_Me vS4068C6(Test_S4068C6, "S4068C6", 184);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4068C4  : S4068C2 {
  ::S4068C5 s4068c4f0;
  ::S4068C6 s4068c4f1;
  virtual void  v3(); // _ZN7S4068C42v3Ev
  ~S4068C4(); // tgen
  S4068C4(); // tgen
};
//SIG(-1 S4068C4) C1{ BC2{ BC3{ vd m} vd v2} v1 FC4{ Fi[5] Fs[2] FL Fc[84] Fi} FC5{ FC4 Fc[64]}}


void  S4068C4 ::v3(){vfunc_called(this, "_ZN7S4068C42v3Ev");}
S4068C4 ::~S4068C4(){ note_dtor("S4068C4", this);} // tgen
S4068C4 ::S4068C4(){ note_ctor("S4068C4", this);} // tgen

static void Test_S4068C4()
{
  extern Class_Descriptor cd_S4068C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,78)];
    init_test(&cd_S4068C4, buf);
    S4068C4 *dp, &lv = *(dp=new (buf) S4068C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,308), "sizeof(S4068C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4068C4)");
    check_base_class_offset(lv, (S4055C3_nt*)(S4068C2*), 0, "S4068C4");
    check_base_class_offset(lv, (S4068C2*), 0, "S4068C4");
    check_field_offset(lv, s4068c4f0, ABISELECT(8,4), "S4068C4.s4068c4f0");
    check_field_offset(lv, s4068c4f1, ABISELECT(128,124), "S4068C4.s4068c4f1");
    test_class_info(&lv, &cd_S4068C4);
    dp->~S4068C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4068C4(Test_S4068C4, "S4068C4", ABISELECT(312,308));

#else // __cplusplus

extern void _ZN7S4068C4C1Ev();
extern void _ZN7S4068C4D1Ev();
Name_Map name_map_S4068C4[] = {
  NSPAIR(_ZN7S4068C4C1Ev),
  NSPAIR(_ZN7S4068C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4068C2;
extern VTBL_ENTRY _ZTI7S4068C2[];
extern  VTBL_ENTRY _ZTV7S4068C2[];
static Base_Class bases_S4068C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4068C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4068C4[];
extern void _ZN7S4068C4D1Ev();
extern void _ZN7S4068C4D0Ev();
extern void _ZN7S4068C22v2Ev();
extern void _ZN7S4068C42v3Ev();
static  VTBL_ENTRY vtc_S4068C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4068C4[0]),
  (VTBL_ENTRY)&_ZN7S4068C4D1Ev,
  (VTBL_ENTRY)&_ZN7S4068C4D0Ev,
  (VTBL_ENTRY)&_ZN7S4068C22v2Ev,
  (VTBL_ENTRY)&_ZN7S4068C42v3Ev,
};
extern VTBL_ENTRY _ZTI7S4068C4[];
extern  VTBL_ENTRY _ZTV7S4068C4[];
Class_Descriptor cd_S4068C4 = {  "S4068C4", // class name
  bases_S4068C4, 2,
  &(vtc_S4068C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,308), // object size
  NSPAIRA(_ZTI7S4068C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4068C4),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4068C1  : S4068C2 {
  ::S4068C4 s4068c1f0;
  void *s4068c1f1;
  virtual void  v1(); // _ZN7S4068C12v1Ev
  ~S4068C1(); // tgen
  S4068C1(); // tgen
};
//SIG(1 S4068C1) C1{ BC2{ BC3{ vd m} vd v2} v1 FC4{ BC2 v3 FC5{ Fi[5] Fs[2] FL Fc[84] Fi} FC6{ FC5 Fc[64]}} Fp}


void  S4068C1 ::v1(){vfunc_called(this, "_ZN7S4068C12v1Ev");}
S4068C1 ::~S4068C1(){ note_dtor("S4068C1", this);} // tgen
S4068C1 ::S4068C1(){ note_ctor("S4068C1", this);} // tgen

static void Test_S4068C1()
{
  extern Class_Descriptor cd_S4068C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,80)];
    init_test(&cd_S4068C1, buf);
    S4068C1 *dp, &lv = *(dp=new (buf) S4068C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,316), "sizeof(S4068C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4068C1)");
    check_base_class_offset(lv, (S4055C3_nt*)(S4068C2*), 0, "S4068C1");
    check_base_class_offset(lv, (S4068C2*), 0, "S4068C1");
    check_field_offset(lv, s4068c1f0, ABISELECT(8,4), "S4068C1.s4068c1f0");
    check_field_offset(lv, s4068c1f1, ABISELECT(320,312), "S4068C1.s4068c1f1");
    test_class_info(&lv, &cd_S4068C1);
    dp->~S4068C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4068C1(Test_S4068C1, "S4068C1", ABISELECT(328,316));

#else // __cplusplus

extern void _ZN7S4068C1C1Ev();
extern void _ZN7S4068C1D1Ev();
Name_Map name_map_S4068C1[] = {
  NSPAIR(_ZN7S4068C1C1Ev),
  NSPAIR(_ZN7S4068C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4068C2;
extern VTBL_ENTRY _ZTI7S4068C2[];
extern  VTBL_ENTRY _ZTV7S4068C2[];
static Base_Class bases_S4068C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4068C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4068C1[];
extern void _ZN7S4068C1D1Ev();
extern void _ZN7S4068C1D0Ev();
extern void _ZN7S4068C22v2Ev();
extern void _ZN7S4068C12v1Ev();
static  VTBL_ENTRY vtc_S4068C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4068C1[0]),
  (VTBL_ENTRY)&_ZN7S4068C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4068C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4068C22v2Ev,
  (VTBL_ENTRY)&_ZN7S4068C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4068C1[];
extern  VTBL_ENTRY _ZTV7S4068C1[];
Class_Descriptor cd_S4068C1 = {  "S4068C1", // class name
  bases_S4068C1, 2,
  &(vtc_S4068C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,316), // object size
  NSPAIRA(_ZTI7S4068C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4068C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4067C2  : S4055C3_nt {
  virtual  ~S4067C2(); // _ZN7S4067C2D1Ev
  virtual void  v2(); // _ZN7S4067C22v2Ev
  S4067C2(); // tgen
};
//SIG(-1 S4067C2) C1{ BC2{ vd m} vd v1}


 S4067C2 ::~S4067C2(){ note_dtor("S4067C2", this);}
void  S4067C2 ::v2(){vfunc_called(this, "_ZN7S4067C22v2Ev");}
S4067C2 ::S4067C2(){ note_ctor("S4067C2", this);} // tgen

static void Test_S4067C2()
{
  extern Class_Descriptor cd_S4067C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4067C2, buf);
    S4067C2 *dp, &lv = *(dp=new (buf) S4067C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4067C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4067C2)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S4067C2");
    test_class_info(&lv, &cd_S4067C2);
    dp->~S4067C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4067C2(Test_S4067C2, "S4067C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4067C2C1Ev();
extern void _ZN7S4067C2D1Ev();
Name_Map name_map_S4067C2[] = {
  NSPAIR(_ZN7S4067C2C1Ev),
  NSPAIR(_ZN7S4067C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S4067C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4067C2[];
extern void _ZN7S4067C2D1Ev();
extern void _ZN7S4067C2D0Ev();
extern void _ZN7S4067C22v2Ev();
static  VTBL_ENTRY vtc_S4067C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4067C2[0]),
  (VTBL_ENTRY)&_ZN7S4067C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4067C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4067C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4067C2[];
extern  VTBL_ENTRY _ZTV7S4067C2[];
Class_Descriptor cd_S4067C2 = {  "S4067C2", // class name
  bases_S4067C2, 1,
  &(vtc_S4067C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4067C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4067C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4067C5  {
  int s4067c5f0[5];
  short s4067c5f1[2];
  long s4067c5f2;
  char s4067c5f3[84];
  int s4067c5f4;
};
//SIG(-1 S4067C5) C1{ Fi[5] Fs[2] Fl Fc[84] Fi}



static void Test_S4067C5()
{
  {
    init_simple_test("S4067C5");
    S4067C5 lv;
    check2(sizeof(lv), ABISELECT(120,116), "sizeof(S4067C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4067C5)");
    check_field_offset(lv, s4067c5f0, 0, "S4067C5.s4067c5f0");
    check_field_offset(lv, s4067c5f1, 20, "S4067C5.s4067c5f1");
    check_field_offset(lv, s4067c5f2, 24, "S4067C5.s4067c5f2");
    check_field_offset(lv, s4067c5f3, ABISELECT(32,28), "S4067C5.s4067c5f3");
    check_field_offset(lv, s4067c5f4, ABISELECT(116,112), "S4067C5.s4067c5f4");
  }
}
static Arrange_To_Call_Me vS4067C5(Test_S4067C5, "S4067C5", ABISELECT(120,116));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4067C6  {
  ::S4067C5 s4067c6f0;
  char s4067c6f1[64];
};
//SIG(-1 S4067C6) C1{ FC2{ Fi[5] Fs[2] Fl Fc[84] Fi} Fc[64]}



static void Test_S4067C6()
{
  {
    init_simple_test("S4067C6");
    S4067C6 lv;
    check2(sizeof(lv), ABISELECT(184,180), "sizeof(S4067C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4067C6)");
    check_field_offset(lv, s4067c6f0, 0, "S4067C6.s4067c6f0");
    check_field_offset(lv, s4067c6f1, ABISELECT(120,116), "S4067C6.s4067c6f1");
  }
}
static Arrange_To_Call_Me vS4067C6(Test_S4067C6, "S4067C6", ABISELECT(184,180));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4067C4  : S4067C2 {
  ::S4067C5 s4067c4f0;
  ::S4067C6 s4067c4f1;
  virtual void  v3(); // _ZN7S4067C42v3Ev
  ~S4067C4(); // tgen
  S4067C4(); // tgen
};
//SIG(-1 S4067C4) C1{ BC2{ BC3{ vd m} vd v2} v1 FC4{ Fi[5] Fs[2] Fl Fc[84] Fi} FC5{ FC4 Fc[64]}}


void  S4067C4 ::v3(){vfunc_called(this, "_ZN7S4067C42v3Ev");}
S4067C4 ::~S4067C4(){ note_dtor("S4067C4", this);} // tgen
S4067C4 ::S4067C4(){ note_ctor("S4067C4", this);} // tgen

static void Test_S4067C4()
{
  extern Class_Descriptor cd_S4067C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,76)];
    init_test(&cd_S4067C4, buf);
    S4067C4 *dp, &lv = *(dp=new (buf) S4067C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,300), "sizeof(S4067C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4067C4)");
    check_base_class_offset(lv, (S4055C3_nt*)(S4067C2*), 0, "S4067C4");
    check_base_class_offset(lv, (S4067C2*), 0, "S4067C4");
    check_field_offset(lv, s4067c4f0, ABISELECT(8,4), "S4067C4.s4067c4f0");
    check_field_offset(lv, s4067c4f1, ABISELECT(128,120), "S4067C4.s4067c4f1");
    test_class_info(&lv, &cd_S4067C4);
    dp->~S4067C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4067C4(Test_S4067C4, "S4067C4", ABISELECT(312,300));

#else // __cplusplus

extern void _ZN7S4067C4C1Ev();
extern void _ZN7S4067C4D1Ev();
Name_Map name_map_S4067C4[] = {
  NSPAIR(_ZN7S4067C4C1Ev),
  NSPAIR(_ZN7S4067C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4067C2;
extern VTBL_ENTRY _ZTI7S4067C2[];
extern  VTBL_ENTRY _ZTV7S4067C2[];
static Base_Class bases_S4067C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4067C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4067C4[];
extern void _ZN7S4067C4D1Ev();
extern void _ZN7S4067C4D0Ev();
extern void _ZN7S4067C22v2Ev();
extern void _ZN7S4067C42v3Ev();
static  VTBL_ENTRY vtc_S4067C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4067C4[0]),
  (VTBL_ENTRY)&_ZN7S4067C4D1Ev,
  (VTBL_ENTRY)&_ZN7S4067C4D0Ev,
  (VTBL_ENTRY)&_ZN7S4067C22v2Ev,
  (VTBL_ENTRY)&_ZN7S4067C42v3Ev,
};
extern VTBL_ENTRY _ZTI7S4067C4[];
extern  VTBL_ENTRY _ZTV7S4067C4[];
Class_Descriptor cd_S4067C4 = {  "S4067C4", // class name
  bases_S4067C4, 2,
  &(vtc_S4067C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(312,300), // object size
  NSPAIRA(_ZTI7S4067C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4067C4),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4067C1  : S4067C2 {
  ::S4067C4 s4067c1f0;
  void *s4067c1f1;
  virtual void  v1(); // _ZN7S4067C12v1Ev
  ~S4067C1(); // tgen
  S4067C1(); // tgen
};
//SIG(1 S4067C1) C1{ BC2{ BC3{ vd m} vd v2} v1 FC4{ BC2 v3 FC5{ Fi[5] Fs[2] Fl Fc[84] Fi} FC6{ FC5 Fc[64]}} Fp}


void  S4067C1 ::v1(){vfunc_called(this, "_ZN7S4067C12v1Ev");}
S4067C1 ::~S4067C1(){ note_dtor("S4067C1", this);} // tgen
S4067C1 ::S4067C1(){ note_ctor("S4067C1", this);} // tgen

static void Test_S4067C1()
{
  extern Class_Descriptor cd_S4067C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(42,78)];
    init_test(&cd_S4067C1, buf);
    S4067C1 *dp, &lv = *(dp=new (buf) S4067C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(328,308), "sizeof(S4067C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4067C1)");
    check_base_class_offset(lv, (S4055C3_nt*)(S4067C2*), 0, "S4067C1");
    check_base_class_offset(lv, (S4067C2*), 0, "S4067C1");
    check_field_offset(lv, s4067c1f0, ABISELECT(8,4), "S4067C1.s4067c1f0");
    check_field_offset(lv, s4067c1f1, ABISELECT(320,304), "S4067C1.s4067c1f1");
    test_class_info(&lv, &cd_S4067C1);
    dp->~S4067C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4067C1(Test_S4067C1, "S4067C1", ABISELECT(328,308));

#else // __cplusplus

extern void _ZN7S4067C1C1Ev();
extern void _ZN7S4067C1D1Ev();
Name_Map name_map_S4067C1[] = {
  NSPAIR(_ZN7S4067C1C1Ev),
  NSPAIR(_ZN7S4067C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4067C2;
extern VTBL_ENTRY _ZTI7S4067C2[];
extern  VTBL_ENTRY _ZTV7S4067C2[];
static Base_Class bases_S4067C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4067C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4067C1[];
extern void _ZN7S4067C1D1Ev();
extern void _ZN7S4067C1D0Ev();
extern void _ZN7S4067C22v2Ev();
extern void _ZN7S4067C12v1Ev();
static  VTBL_ENTRY vtc_S4067C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4067C1[0]),
  (VTBL_ENTRY)&_ZN7S4067C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4067C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4067C22v2Ev,
  (VTBL_ENTRY)&_ZN7S4067C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4067C1[];
extern  VTBL_ENTRY _ZTV7S4067C1[];
Class_Descriptor cd_S4067C1 = {  "S4067C1", // class name
  bases_S4067C1, 2,
  &(vtc_S4067C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(328,308), // object size
  NSPAIRA(_ZTI7S4067C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4067C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9555C2  {
  virtual  ~S9555C2(); // _ZN7S9555C2D1Ev
  virtual void  v3(); // _ZN7S9555C22v3Ev
  virtual void  v4(); // _ZN7S9555C22v4Ev
  S9555C2(); // tgen
};
//SIG(-1 S9555C2) C1{ vd v1 v2}


 S9555C2 ::~S9555C2(){ note_dtor("S9555C2", this);}
void  S9555C2 ::v3(){vfunc_called(this, "_ZN7S9555C22v3Ev");}
void  S9555C2 ::v4(){vfunc_called(this, "_ZN7S9555C22v4Ev");}
S9555C2 ::S9555C2(){ note_ctor("S9555C2", this);} // tgen

static void Test_S9555C2()
{
  extern Class_Descriptor cd_S9555C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9555C2, buf);
    S9555C2 *dp, &lv = *(dp=new (buf) S9555C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9555C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9555C2)");
    test_class_info(&lv, &cd_S9555C2);
    dp->~S9555C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9555C2(Test_S9555C2, "S9555C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9555C2C1Ev();
extern void _ZN7S9555C2D1Ev();
Name_Map name_map_S9555C2[] = {
  NSPAIR(_ZN7S9555C2C1Ev),
  NSPAIR(_ZN7S9555C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9555C2[];
extern void _ZN7S9555C2D1Ev();
extern void _ZN7S9555C2D0Ev();
extern void _ZN7S9555C22v3Ev();
extern void _ZN7S9555C22v4Ev();
static  VTBL_ENTRY vtc_S9555C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9555C2[0]),
  (VTBL_ENTRY)&_ZN7S9555C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9555C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9555C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9555C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9555C2[];
extern  VTBL_ENTRY _ZTV7S9555C2[];
Class_Descriptor cd_S9555C2 = {  "S9555C2", // class name
  0,0,//no base classes
  &(vtc_S9555C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9555C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9555C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9555C1  : S9555C2 {
  __tsi64 s9555c1f0;
  ::S3818C4 s9555c1f1;
  void *s9555c1f2;
  virtual void  v1(); // _ZN7S9555C12v1Ev
  virtual void  v2(); // _ZN7S9555C12v2Ev
  ~S9555C1(); // tgen
  S9555C1(); // tgen
};
//SIG(1 S9555C1) C1{ BC2{ vd v3 v4} v1 v2 FL FC3{ m FL Fi FC4{ m Fp Fi FC5{ m}} Fi FL FC4 Fc FC4 Fi FC4} Fp}


void  S9555C1 ::v1(){vfunc_called(this, "_ZN7S9555C12v1Ev");}
void  S9555C1 ::v2(){vfunc_called(this, "_ZN7S9555C12v2Ev");}
S9555C1 ::~S9555C1(){ note_dtor("S9555C1", this);} // tgen
S9555C1 ::S9555C1(){ note_ctor("S9555C1", this);} // tgen

static void Test_S9555C1()
{
  extern Class_Descriptor cd_S9555C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,25)];
    init_test(&cd_S9555C1, buf);
    S9555C1 *dp, &lv = *(dp=new (buf) S9555C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,96), "sizeof(S9555C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9555C1)");
    check_base_class_offset(lv, (S9555C2*), 0, "S9555C1");
    check_field_offset(lv, s9555c1f0, ABISELECT(8,4), "S9555C1.s9555c1f0");
    check_field_offset(lv, s9555c1f1, ABISELECT(16,12), "S9555C1.s9555c1f1");
    check_field_offset(lv, s9555c1f2, ABISELECT(128,92), "S9555C1.s9555c1f2");
    test_class_info(&lv, &cd_S9555C1);
    dp->~S9555C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9555C1(Test_S9555C1, "S9555C1", ABISELECT(136,96));

#else // __cplusplus

extern void _ZN7S9555C1C1Ev();
extern void _ZN7S9555C1D1Ev();
Name_Map name_map_S9555C1[] = {
  NSPAIR(_ZN7S9555C1C1Ev),
  NSPAIR(_ZN7S9555C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9555C2;
extern VTBL_ENTRY _ZTI7S9555C2[];
extern  VTBL_ENTRY _ZTV7S9555C2[];
static Base_Class bases_S9555C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9555C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9555C1[];
extern void _ZN7S9555C1D1Ev();
extern void _ZN7S9555C1D0Ev();
extern void _ZN7S9555C22v3Ev();
extern void _ZN7S9555C22v4Ev();
extern void _ZN7S9555C12v1Ev();
extern void _ZN7S9555C12v2Ev();
static  VTBL_ENTRY vtc_S9555C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9555C1[0]),
  (VTBL_ENTRY)&_ZN7S9555C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9555C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9555C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9555C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9555C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9555C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9555C1[];
extern  VTBL_ENTRY _ZTV7S9555C1[];
Class_Descriptor cd_S9555C1 = {  "S9555C1", // class name
  bases_S9555C1, 1,
  &(vtc_S9555C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,96), // object size
  NSPAIRA(_ZTI7S9555C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9555C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18061C1  {
  void *s18061c1f0[2];
  ::S8663C7_nt s18061c1f1;
  void *s18061c1f2[2];
  char s18061c1f3;
  void  mf18061c1(); // _ZN8S18061C19mf18061c1Ev
};
//SIG(1 S18061C1) C1{ m Fp[2] FC2{ vd v1 v2 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fi[4]}[3] Fp[2] Fi Fc} Fp[2] Fc}


void  S18061C1 ::mf18061c1(){}

static void Test_S18061C1()
{
  {
    init_simple_test("S18061C1");
    S18061C1 lv;
    check2(sizeof(lv), ABISELECT(144,104), "sizeof(S18061C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18061C1)");
    check_field_offset(lv, s18061c1f0, 0, "S18061C1.s18061c1f0");
    check_field_offset(lv, s18061c1f1, ABISELECT(16,8), "S18061C1.s18061c1f1");
    check_field_offset(lv, s18061c1f2, ABISELECT(120,92), "S18061C1.s18061c1f2");
    check_field_offset(lv, s18061c1f3, ABISELECT(136,100), "S18061C1.s18061c1f3");
  }
}
static Arrange_To_Call_Me vS18061C1(Test_S18061C1, "S18061C1", ABISELECT(144,104));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15186C3_nt  {
  int s15186c3f0[4];
};
//SIG(-1 S15186C3_nt) C1{ Fi[4]}



//skip512 S15186C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15186C2  {
  int s15186c2f0;
  ::S15186C3_nt s15186c2f1;
  ::S15054C11 s15186c2f2;
  ::S15054C11 s15186c2f3;
  ::S15054C12 s15186c2f4;
};
//SIG(-1 S15186C2) C1{ Fi FC2{ Fi[4]} FC3{ m FC4{ m FC5{ FL}} FC4} FC3 FC4}



static void Test_S15186C2()
{
  {
    init_simple_test("S15186C2");
    S15186C2 lv;
    check2(sizeof(lv), ABISELECT(64,60), "sizeof(S15186C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15186C2)");
    check_field_offset(lv, s15186c2f0, 0, "S15186C2.s15186c2f0");
    check_field_offset(lv, s15186c2f1, 4, "S15186C2.s15186c2f1");
    check_field_offset(lv, s15186c2f2, ABISELECT(24,20), "S15186C2.s15186c2f2");
    check_field_offset(lv, s15186c2f3, ABISELECT(40,36), "S15186C2.s15186c2f3");
    check_field_offset(lv, s15186c2f4, ABISELECT(56,52), "S15186C2.s15186c2f4");
  }
}
static Arrange_To_Call_Me vS15186C2(Test_S15186C2, "S15186C2", ABISELECT(64,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15186C7  {
  int s15186c7f0;
  ::S15186C3_nt s15186c7f1;
  ::S15054C11 s15186c7f2;
};
//SIG(1 S15186C7) C1{ Fi FC2{ Fi[4]} FC3{ m FC4{ m FC5{ FL}} FC4}}



static void Test_S15186C7()
{
  {
    init_simple_test("S15186C7");
    S15186C7 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S15186C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15186C7)");
    check_field_offset(lv, s15186c7f0, 0, "S15186C7.s15186c7f0");
    check_field_offset(lv, s15186c7f1, 4, "S15186C7.s15186c7f1");
    check_field_offset(lv, s15186c7f2, ABISELECT(24,20), "S15186C7.s15186c7f2");
  }
}
static Arrange_To_Call_Me vS15186C7(Test_S15186C7, "S15186C7", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15186C1  {
  char s15186c1f0[2];
  ::S15186C2 s15186c1f1;
  ::S15186C7 s15186c1f2[33];
  void  mf15186c1(); // _ZN8S15186C19mf15186c1Ev
};
//SIG(1 S15186C1) C1{ m Fc[2] FC2{ Fi FC3{ Fi[4]} FC4{ m FC5{ m FC6{ FL}} FC5} FC4 FC5} FC7{ Fi FC3 FC4}[33]}


void  S15186C1 ::mf15186c1(){}

static void Test_S15186C1()
{
  {
    init_simple_test("S15186C1");
    S15186C1 lv;
    check2(sizeof(lv), ABISELECT(1392,1252), "sizeof(S15186C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15186C1)");
    check_field_offset(lv, s15186c1f0, 0, "S15186C1.s15186c1f0");
    check_field_offset(lv, s15186c1f1, ABISELECT(8,4), "S15186C1.s15186c1f1");
    check_field_offset(lv, s15186c1f2, ABISELECT(72,64), "S15186C1.s15186c1f2");
  }
}
static Arrange_To_Call_Me vS15186C1(Test_S15186C1, "S15186C1", ABISELECT(1392,1252));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15185C2  {
  int s15185c2f0;
  ::S15186C3_nt s15185c2f1;
  ::S15053C11 s15185c2f2;
  ::S15053C11 s15185c2f3;
  ::S15053C12 s15185c2f4;
};
//SIG(-1 S15185C2) C1{ Fi FC2{ Fi[4]} FC3{ m FC4{ m FC5{ Fl}} FC4} FC3 FC4}



static void Test_S15185C2()
{
  {
    init_simple_test("S15185C2");
    S15185C2 lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S15185C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15185C2)");
    check_field_offset(lv, s15185c2f0, 0, "S15185C2.s15185c2f0");
    check_field_offset(lv, s15185c2f1, 4, "S15185C2.s15185c2f1");
    check_field_offset(lv, s15185c2f2, ABISELECT(24,20), "S15185C2.s15185c2f2");
    check_field_offset(lv, s15185c2f3, ABISELECT(40,28), "S15185C2.s15185c2f3");
    check_field_offset(lv, s15185c2f4, ABISELECT(56,36), "S15185C2.s15185c2f4");
  }
}
static Arrange_To_Call_Me vS15185C2(Test_S15185C2, "S15185C2", ABISELECT(64,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15185C7  {
  int s15185c7f0;
  ::S15186C3_nt s15185c7f1;
  ::S15053C11 s15185c7f2;
};
//SIG(1 S15185C7) C1{ Fi FC2{ Fi[4]} FC3{ m FC4{ m FC5{ Fl}} FC4}}



static void Test_S15185C7()
{
  {
    init_simple_test("S15185C7");
    S15185C7 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S15185C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15185C7)");
    check_field_offset(lv, s15185c7f0, 0, "S15185C7.s15185c7f0");
    check_field_offset(lv, s15185c7f1, 4, "S15185C7.s15185c7f1");
    check_field_offset(lv, s15185c7f2, ABISELECT(24,20), "S15185C7.s15185c7f2");
  }
}
static Arrange_To_Call_Me vS15185C7(Test_S15185C7, "S15185C7", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15185C1  {
  char s15185c1f0[2];
  ::S15185C2 s15185c1f1;
  ::S15185C7 s15185c1f2[33];
  void  mf15185c1(); // _ZN8S15185C19mf15185c1Ev
};
//SIG(1 S15185C1) C1{ m Fc[2] FC2{ Fi FC3{ Fi[4]} FC4{ m FC5{ m FC6{ Fl}} FC5} FC4 FC5} FC7{ Fi FC3 FC4}[33]}


void  S15185C1 ::mf15185c1(){}

static void Test_S15185C1()
{
  {
    init_simple_test("S15185C1");
    S15185C1 lv;
    check2(sizeof(lv), ABISELECT(1392,968), "sizeof(S15185C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15185C1)");
    check_field_offset(lv, s15185c1f0, 0, "S15185C1.s15185c1f0");
    check_field_offset(lv, s15185c1f1, ABISELECT(8,4), "S15185C1.s15185c1f1");
    check_field_offset(lv, s15185c1f2, ABISELECT(72,44), "S15185C1.s15185c1f2");
  }
}
static Arrange_To_Call_Me vS15185C1(Test_S15185C1, "S15185C1", ABISELECT(1392,968));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8444C2  {
  ::S9538C14_nt s8444c2f0;
  ::S8663C10_nt s8444c2f1[3];
  void *s8444c2f2[2];
  int s8444c2f3;
  char s8444c2f4;
  virtual  ~S8444C2(); // _ZN7S8444C2D1Ev
  virtual void  v1(); // _ZN7S8444C22v1Ev
  virtual void  v2(); // _ZN7S8444C22v2Ev
  S8444C2(); // tgen
};
//SIG(-1 S8444C2) C1{ vd v1 v2 FC2{ m Fp Fi[2] FC3{ m}} FC4{ m Fi[4]}[3] Fp[2] Fi Fc}


 S8444C2 ::~S8444C2(){ note_dtor("S8444C2", this);}
void  S8444C2 ::v1(){vfunc_called(this, "_ZN7S8444C22v1Ev");}
void  S8444C2 ::v2(){vfunc_called(this, "_ZN7S8444C22v2Ev");}
S8444C2 ::S8444C2(){ note_ctor("S8444C2", this);} // tgen

static void Test_S8444C2()
{
  extern Class_Descriptor cd_S8444C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,22)];
    init_test(&cd_S8444C2, buf);
    S8444C2 *dp, &lv = *(dp=new (buf) S8444C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,84), "sizeof(S8444C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8444C2)");
    check_field_offset(lv, s8444c2f0, ABISELECT(8,4), "S8444C2.s8444c2f0");
    check_field_offset(lv, s8444c2f1, ABISELECT(32,20), "S8444C2.s8444c2f1");
    check_field_offset(lv, s8444c2f2, ABISELECT(80,68), "S8444C2.s8444c2f2");
    check_field_offset(lv, s8444c2f3, ABISELECT(96,76), "S8444C2.s8444c2f3");
    check_field_offset(lv, s8444c2f4, ABISELECT(100,80), "S8444C2.s8444c2f4");
    test_class_info(&lv, &cd_S8444C2);
    dp->~S8444C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8444C2(Test_S8444C2, "S8444C2", ABISELECT(104,84));

#else // __cplusplus

extern void _ZN7S8444C2C1Ev();
extern void _ZN7S8444C2D1Ev();
Name_Map name_map_S8444C2[] = {
  NSPAIR(_ZN7S8444C2C1Ev),
  NSPAIR(_ZN7S8444C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8444C2[];
extern void _ZN7S8444C2D1Ev();
extern void _ZN7S8444C2D0Ev();
extern void _ZN7S8444C22v1Ev();
extern void _ZN7S8444C22v2Ev();
static  VTBL_ENTRY vtc_S8444C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8444C2[0]),
  (VTBL_ENTRY)&_ZN7S8444C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8444C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8444C22v1Ev,
  (VTBL_ENTRY)&_ZN7S8444C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8444C2[];
extern  VTBL_ENTRY _ZTV7S8444C2[];
Class_Descriptor cd_S8444C2 = {  "S8444C2", // class name
  0,0,//no base classes
  &(vtc_S8444C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,84), // object size
  NSPAIRA(_ZTI7S8444C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8444C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8444C1  : S8444C2 {
  ::S8663C10_nt s8444c1f0;
  int s8444c1f1;
  virtual  ~S8444C1(); // _ZN7S8444C1D1Ev
  S8444C1(); // tgen
};
//SIG(1 S8444C1) C1{ BC2{ vd v1 v2 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fi[4]}[3] Fp[2] Fi Fc} vd FC5 Fi}


 S8444C1 ::~S8444C1(){ note_dtor("S8444C1", this);}
S8444C1 ::S8444C1(){ note_ctor("S8444C1", this);} // tgen

static void Test_S8444C1()
{
  extern Class_Descriptor cd_S8444C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,27)];
    init_test(&cd_S8444C1, buf);
    S8444C1 *dp, &lv = *(dp=new (buf) S8444C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,104), "sizeof(S8444C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8444C1)");
    check_base_class_offset(lv, (S8444C2*), 0, "S8444C1");
    check_field_offset(lv, s8444c1f0, ABISELECT(104,84), "S8444C1.s8444c1f0");
    check_field_offset(lv, s8444c1f1, ABISELECT(120,100), "S8444C1.s8444c1f1");
    test_class_info(&lv, &cd_S8444C1);
    dp->~S8444C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8444C1(Test_S8444C1, "S8444C1", ABISELECT(128,104));

#else // __cplusplus

extern void _ZN7S8444C1C1Ev();
extern void _ZN7S8444C1D1Ev();
Name_Map name_map_S8444C1[] = {
  NSPAIR(_ZN7S8444C1C1Ev),
  NSPAIR(_ZN7S8444C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8444C2;
extern VTBL_ENTRY _ZTI7S8444C2[];
extern  VTBL_ENTRY _ZTV7S8444C2[];
static Base_Class bases_S8444C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8444C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8444C1[];
extern void _ZN7S8444C1D1Ev();
extern void _ZN7S8444C1D0Ev();
extern void _ZN7S8444C22v1Ev();
extern void _ZN7S8444C22v2Ev();
static  VTBL_ENTRY vtc_S8444C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8444C1[0]),
  (VTBL_ENTRY)&_ZN7S8444C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8444C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8444C22v1Ev,
  (VTBL_ENTRY)&_ZN7S8444C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8444C1[];
extern  VTBL_ENTRY _ZTV7S8444C1[];
Class_Descriptor cd_S8444C1 = {  "S8444C1", // class name
  bases_S8444C1, 1,
  &(vtc_S8444C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,104), // object size
  NSPAIRA(_ZTI7S8444C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8444C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18063C1  {
  void *s18063c1f0[2];
  ::S8663C7_nt s18063c1f1;
  void  mf18063c1(); // _ZN8S18063C19mf18063c1Ev
};
//SIG(1 S18063C1) C1{ m Fp[2] FC2{ vd v1 v2 FC3{ m Fp Fi[2] FC4{ m}} FC5{ m Fi[4]}[3] Fp[2] Fi Fc}}


void  S18063C1 ::mf18063c1(){}

static void Test_S18063C1()
{
  {
    init_simple_test("S18063C1");
    S18063C1 lv;
    check2(sizeof(lv), ABISELECT(120,92), "sizeof(S18063C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18063C1)");
    check_field_offset(lv, s18063c1f0, 0, "S18063C1.s18063c1f0");
    check_field_offset(lv, s18063c1f1, ABISELECT(16,8), "S18063C1.s18063c1f1");
  }
}
static Arrange_To_Call_Me vS18063C1(Test_S18063C1, "S18063C1", ABISELECT(120,92));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2636C2  : S16932C14 {
};
//SIG(-1 S2636C2) C1{ BC2{ m Fi}}



static void Test_S2636C2()
{
  extern Class_Descriptor cd_S2636C2;
  void *lvp;
  {
    int buf[2];
    init_test(&cd_S2636C2, buf);
    S2636C2 &lv = *(new (buf) S2636C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), 4, "sizeof(S2636C2)");
    check2(__alignof__(lv), 4, "__alignof__(S2636C2)");
    check_base_class_offset(lv, (S16932C14*), 0, "S2636C2");
    test_class_info(&lv, &cd_S2636C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2636C2(Test_S2636C2, "S2636C2", 4);

#else // __cplusplus

extern Class_Descriptor cd_S16932C14;
static Base_Class bases_S2636C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16932C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2636C2 = {  "S2636C2", // class name
  bases_S2636C2, 1,
  0, // no vftv
  0, //no vtt
  4, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2636C8_nt  {
  void *s2636c8f0;
  int s2636c8f1[4];
  void  mf2636c8(); // _ZN10S2636C8_nt8mf2636c8Ev
};
//SIG(-1 S2636C8_nt) C1{ m Fp Fi[4]}


void  S2636C8_nt ::mf2636c8(){}

//skip512 S2636C8_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2636C7_nt  {
  ::S2636C8_nt s2636c7f0;
  void  mf2636c7(); // _ZN10S2636C7_nt8mf2636c7Ev
};
//SIG(-1 S2636C7_nt) C1{ m FC2{ m Fp Fi[4]}}


void  S2636C7_nt ::mf2636c7(){}

//skip512 S2636C7_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2636C1  : S2636C2 {
  ::S2651C18 s2636c1f0;
  int s2636c1f1;
  ::S7924C15_nt s2636c1f2;
  ::S2636C7_nt s2636c1f3;
  char s2636c1f4;
};
//SIG(1 S2636C1) C1{ BC2{ BC3{ m Fi}} FC4{ m FC5{ m Fp}} Fi FC6{ m Fp} FC7{ m FC8{ m Fp Fi[4]}} Fc}



static void Test_S2636C1()
{
  extern Class_Descriptor cd_S2636C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S2636C1, buf);
    S2636C1 &lv = *(new (buf) S2636C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S2636C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2636C1)");
    check_base_class_offset(lv, (S16932C14*)(S2636C2*), 0, "S2636C1");
    check_base_class_offset(lv, (S2636C2*), 0, "S2636C1");
    check_field_offset(lv, s2636c1f0, ABISELECT(8,4), "S2636C1.s2636c1f0");
    check_field_offset(lv, s2636c1f1, ABISELECT(16,8), "S2636C1.s2636c1f1");
    check_field_offset(lv, s2636c1f2, ABISELECT(24,12), "S2636C1.s2636c1f2");
    check_field_offset(lv, s2636c1f3, ABISELECT(32,16), "S2636C1.s2636c1f3");
    check_field_offset(lv, s2636c1f4, ABISELECT(56,36), "S2636C1.s2636c1f4");
    test_class_info(&lv, &cd_S2636C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2636C1(Test_S2636C1, "S2636C1", ABISELECT(64,40));

#else // __cplusplus

extern Class_Descriptor cd_S16932C14;
extern Class_Descriptor cd_S2636C2;
static Base_Class bases_S2636C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16932C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2636C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2636C1 = {  "S2636C1", // class name
  bases_S2636C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(64,40), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S10633C2  {
  ::S8715C40 s10633c2f0;
  ::S8715C40 s10633c2f1;
  ::S8715C40 s10633c2f2;
  int s10633c2f3;
  int s10633c2f4;
  int s10633c2f5;
  int s10633c2f6;
  int s10633c2f7;
  void *s10633c2f8;
};
//SIG(1 S10633C2) U1{ FC2{ Fc Fc Fs FC3{ Fi} Fs Fc[6]} FC2 FC2 Fi Fi Fi Fi Fi Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S10633C1  {
  char s10633c1f0[16];
  ::S10633C2 s10633c1f1;
};
//SIG(1 S10633C1) C1{ Fc[16] FU2{ FC3{ Fc Fc Fs FC4{ Fi} Fs Fc[6]} FC3 FC3 Fi Fi Fi Fi Fi Fp}}



static void Test_S10633C1()
{
  {
    init_simple_test("S10633C1");
    S10633C1 lv;
    check2(sizeof(lv), 32, "sizeof(S10633C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10633C1)");
    check_field_offset(lv, s10633c1f0, 0, "S10633C1.s10633c1f0");
    check_field_offset(lv, s10633c1f1, 16, "S10633C1.s10633c1f1");
  }
}
static Arrange_To_Call_Me vS10633C1(Test_S10633C1, "S10633C1", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9546C2  {
  virtual  ~S9546C2(); // _ZN7S9546C2D1Ev
  virtual void  v3(); // _ZN7S9546C22v3Ev
  virtual void  v4(); // _ZN7S9546C22v4Ev
  S9546C2(); // tgen
};
//SIG(-1 S9546C2) C1{ vd v1 v2}


 S9546C2 ::~S9546C2(){ note_dtor("S9546C2", this);}
void  S9546C2 ::v3(){vfunc_called(this, "_ZN7S9546C22v3Ev");}
void  S9546C2 ::v4(){vfunc_called(this, "_ZN7S9546C22v4Ev");}
S9546C2 ::S9546C2(){ note_ctor("S9546C2", this);} // tgen

static void Test_S9546C2()
{
  extern Class_Descriptor cd_S9546C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9546C2, buf);
    S9546C2 *dp, &lv = *(dp=new (buf) S9546C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9546C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9546C2)");
    test_class_info(&lv, &cd_S9546C2);
    dp->~S9546C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9546C2(Test_S9546C2, "S9546C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9546C2C1Ev();
extern void _ZN7S9546C2D1Ev();
Name_Map name_map_S9546C2[] = {
  NSPAIR(_ZN7S9546C2C1Ev),
  NSPAIR(_ZN7S9546C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9546C2[];
extern void _ZN7S9546C2D1Ev();
extern void _ZN7S9546C2D0Ev();
extern void _ZN7S9546C22v3Ev();
extern void _ZN7S9546C22v4Ev();
static  VTBL_ENTRY vtc_S9546C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9546C2[0]),
  (VTBL_ENTRY)&_ZN7S9546C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9546C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9546C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9546C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9546C2[];
extern  VTBL_ENTRY _ZTV7S9546C2[];
Class_Descriptor cd_S9546C2 = {  "S9546C2", // class name
  0,0,//no base classes
  &(vtc_S9546C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9546C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9546C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9546C1  : S9546C2 {
  ::S9538C12 s9546c1f0;
  void *s9546c1f1;
  virtual void  v1(); // _ZN7S9546C12v1Ev
  virtual void  v2(); // _ZN7S9546C12v2Ev
  ~S9546C1(); // tgen
  S9546C1(); // tgen
};
//SIG(1 S9546C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m FL FC4{ m FC5{ m Fp Fi FC6{ m}} Fi FC5} Fi} Fp}


void  S9546C1 ::v1(){vfunc_called(this, "_ZN7S9546C12v1Ev");}
void  S9546C1 ::v2(){vfunc_called(this, "_ZN7S9546C12v2Ev");}
S9546C1 ::~S9546C1(){ note_dtor("S9546C1", this);} // tgen
S9546C1 ::S9546C1(){ note_ctor("S9546C1", this);} // tgen

static void Test_S9546C1()
{
  extern Class_Descriptor cd_S9546C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S9546C1, buf);
    S9546C1 *dp, &lv = *(dp=new (buf) S9546C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S9546C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9546C1)");
    check_base_class_offset(lv, (S9546C2*), 0, "S9546C1");
    check_field_offset(lv, s9546c1f0, ABISELECT(8,4), "S9546C1.s9546c1f0");
    check_field_offset(lv, s9546c1f1, ABISELECT(64,44), "S9546C1.s9546c1f1");
    test_class_info(&lv, &cd_S9546C1);
    dp->~S9546C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9546C1(Test_S9546C1, "S9546C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN7S9546C1C1Ev();
extern void _ZN7S9546C1D1Ev();
Name_Map name_map_S9546C1[] = {
  NSPAIR(_ZN7S9546C1C1Ev),
  NSPAIR(_ZN7S9546C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9546C2;
extern VTBL_ENTRY _ZTI7S9546C2[];
extern  VTBL_ENTRY _ZTV7S9546C2[];
static Base_Class bases_S9546C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9546C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9546C1[];
extern void _ZN7S9546C1D1Ev();
extern void _ZN7S9546C1D0Ev();
extern void _ZN7S9546C22v3Ev();
extern void _ZN7S9546C22v4Ev();
extern void _ZN7S9546C12v1Ev();
extern void _ZN7S9546C12v2Ev();
static  VTBL_ENTRY vtc_S9546C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9546C1[0]),
  (VTBL_ENTRY)&_ZN7S9546C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9546C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9546C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9546C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9546C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9546C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9546C1[];
extern  VTBL_ENTRY _ZTV7S9546C1[];
Class_Descriptor cd_S9546C1 = {  "S9546C1", // class name
  bases_S9546C1, 1,
  &(vtc_S9546C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI7S9546C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9546C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14592C2_nt  {
  void *s14592c2f0;
  int s14592c2f1;
  long s14592c2f2;
  void *s14592c2f3;
  int s14592c2f4;
  long s14592c2f5;
  void *s14592c2f6[5];
  int s14592c2f7;
  long s14592c2f8[2];
};
//SIG(-1 S14592C2_nt) C1{ Fp Fi Fl Fp Fi Fl Fp[5] Fi Fl[2]}



//skip512 S14592C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14592C1  {
  void *s14592c1f0[3];
  ::S14592C2_nt s14592c1f1;
  long s14592c1f2;
  char s14592c1f3[8192];
  long s14592c1f4;
  void *s14592c1f5[2];
};
//SIG(1 S14592C1) C1{ Fp[3] FC2{ Fp Fi Fl Fp Fi Fl Fp[5] Fi Fl[2]} Fl Fc[8192] Fl Fp[2]}



static void Test_S14592C1()
{
  {
    init_simple_test("S14592C1");
    S14592C1 lv;
    check2(sizeof(lv), ABISELECT(8360,8276), "sizeof(S14592C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14592C1)");
    check_field_offset(lv, s14592c1f0, 0, "S14592C1.s14592c1f0");
    check_field_offset(lv, s14592c1f1, ABISELECT(24,12), "S14592C1.s14592c1f1");
    check_field_offset(lv, s14592c1f2, ABISELECT(136,68), "S14592C1.s14592c1f2");
    check_field_offset(lv, s14592c1f3, ABISELECT(144,72), "S14592C1.s14592c1f3");
    check_field_offset(lv, s14592c1f4, ABISELECT(8336,8264), "S14592C1.s14592c1f4");
    check_field_offset(lv, s14592c1f5, ABISELECT(8344,8268), "S14592C1.s14592c1f5");
  }
}
static Arrange_To_Call_Me vS14592C1(Test_S14592C1, "S14592C1", ABISELECT(8360,8276));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11992C2  {
  ::S9538C12 s11992c2f0;
  int s11992c2f1;
  __tsi64 s11992c2f2[2];
  void  mf11992c2(); // _ZN8S11992C29mf11992c2Ev
};
//SIG(-1 S11992C2) C1{ m FC2{ m FL FC3{ m FC4{ m Fp Fi FC5{ m}} Fi FC4} Fi} Fi FL[2]}


void  S11992C2 ::mf11992c2(){}

static void Test_S11992C2()
{
  {
    init_simple_test("S11992C2");
    S11992C2 lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S11992C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11992C2)");
    check_field_offset(lv, s11992c2f0, 0, "S11992C2.s11992c2f0");
    check_field_offset(lv, s11992c2f1, ABISELECT(56,40), "S11992C2.s11992c2f1");
    check_field_offset(lv, s11992c2f2, ABISELECT(64,44), "S11992C2.s11992c2f2");
  }
}
static Arrange_To_Call_Me vS11992C2(Test_S11992C2, "S11992C2", ABISELECT(80,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11992C1  {
  ::S11992C2 s11992c1f0;
  ::S21714C10_nt s11992c1f1;
};
//SIG(1 S11992C1) C1{ FC2{ m FC3{ m FL FC4{ m FC5{ m Fp Fi FC6{ m}} Fi FC5} Fi} Fi FL[2]} FC7{ m Fp Fi FC8{ m}}}



static void Test_S11992C1()
{
  {
    init_simple_test("S11992C1");
    S11992C1 lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S11992C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11992C1)");
    check_field_offset(lv, s11992c1f0, 0, "S11992C1.s11992c1f0");
    check_field_offset(lv, s11992c1f1, ABISELECT(80,60), "S11992C1.s11992c1f1");
  }
}
static Arrange_To_Call_Me vS11992C1(Test_S11992C1, "S11992C1", ABISELECT(96,72));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4071C2  : S4055C3_nt {
  virtual  ~S4071C2(); // _ZN7S4071C2D1Ev
  virtual void  v2(); // _ZN7S4071C22v2Ev
  S4071C2(); // tgen
};
//SIG(-1 S4071C2) C1{ BC2{ vd m} vd v1}


 S4071C2 ::~S4071C2(){ note_dtor("S4071C2", this);}
void  S4071C2 ::v2(){vfunc_called(this, "_ZN7S4071C22v2Ev");}
S4071C2 ::S4071C2(){ note_ctor("S4071C2", this);} // tgen

static void Test_S4071C2()
{
  extern Class_Descriptor cd_S4071C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4071C2, buf);
    S4071C2 *dp, &lv = *(dp=new (buf) S4071C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4071C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4071C2)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S4071C2");
    test_class_info(&lv, &cd_S4071C2);
    dp->~S4071C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4071C2(Test_S4071C2, "S4071C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4071C2C1Ev();
extern void _ZN7S4071C2D1Ev();
Name_Map name_map_S4071C2[] = {
  NSPAIR(_ZN7S4071C2C1Ev),
  NSPAIR(_ZN7S4071C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S4071C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4071C2[];
extern void _ZN7S4071C2D1Ev();
extern void _ZN7S4071C2D0Ev();
extern void _ZN7S4071C22v2Ev();
static  VTBL_ENTRY vtc_S4071C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4071C2[0]),
  (VTBL_ENTRY)&_ZN7S4071C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4071C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4071C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4071C2[];
extern  VTBL_ENTRY _ZTV7S4071C2[];
Class_Descriptor cd_S4071C2 = {  "S4071C2", // class name
  bases_S4071C2, 1,
  &(vtc_S4071C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4071C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4071C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4071C1  : S4071C2 {
  ::S4068C6 s4071c1f0;
  virtual void  v1(); // _ZN7S4071C12v1Ev
  ~S4071C1(); // tgen
  S4071C1(); // tgen
};
//SIG(1 S4071C1) C1{ BC2{ BC3{ vd m} vd v2} v1 FC4{ FC5{ Fi[5] Fs[2] FL Fc[84] Fi} Fc[64]}}


void  S4071C1 ::v1(){vfunc_called(this, "_ZN7S4071C12v1Ev");}
S4071C1 ::~S4071C1(){ note_dtor("S4071C1", this);} // tgen
S4071C1 ::S4071C1(){ note_ctor("S4071C1", this);} // tgen

static void Test_S4071C1()
{
  extern Class_Descriptor cd_S4071C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,48)];
    init_test(&cd_S4071C1, buf);
    S4071C1 *dp, &lv = *(dp=new (buf) S4071C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,188), "sizeof(S4071C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4071C1)");
    check_base_class_offset(lv, (S4055C3_nt*)(S4071C2*), 0, "S4071C1");
    check_base_class_offset(lv, (S4071C2*), 0, "S4071C1");
    check_field_offset(lv, s4071c1f0, ABISELECT(8,4), "S4071C1.s4071c1f0");
    test_class_info(&lv, &cd_S4071C1);
    dp->~S4071C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4071C1(Test_S4071C1, "S4071C1", ABISELECT(192,188));

#else // __cplusplus

extern void _ZN7S4071C1C1Ev();
extern void _ZN7S4071C1D1Ev();
Name_Map name_map_S4071C1[] = {
  NSPAIR(_ZN7S4071C1C1Ev),
  NSPAIR(_ZN7S4071C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4071C2;
extern VTBL_ENTRY _ZTI7S4071C2[];
extern  VTBL_ENTRY _ZTV7S4071C2[];
static Base_Class bases_S4071C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4071C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4071C1[];
extern void _ZN7S4071C1D1Ev();
extern void _ZN7S4071C1D0Ev();
extern void _ZN7S4071C22v2Ev();
extern void _ZN7S4071C12v1Ev();
static  VTBL_ENTRY vtc_S4071C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4071C1[0]),
  (VTBL_ENTRY)&_ZN7S4071C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4071C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4071C22v2Ev,
  (VTBL_ENTRY)&_ZN7S4071C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4071C1[];
extern  VTBL_ENTRY _ZTV7S4071C1[];
Class_Descriptor cd_S4071C1 = {  "S4071C1", // class name
  bases_S4071C1, 2,
  &(vtc_S4071C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,188), // object size
  NSPAIRA(_ZTI7S4071C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4071C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4070C2  : S4055C3_nt {
  virtual  ~S4070C2(); // _ZN7S4070C2D1Ev
  virtual void  v2(); // _ZN7S4070C22v2Ev
  S4070C2(); // tgen
};
//SIG(-1 S4070C2) C1{ BC2{ vd m} vd v1}


 S4070C2 ::~S4070C2(){ note_dtor("S4070C2", this);}
void  S4070C2 ::v2(){vfunc_called(this, "_ZN7S4070C22v2Ev");}
S4070C2 ::S4070C2(){ note_ctor("S4070C2", this);} // tgen

static void Test_S4070C2()
{
  extern Class_Descriptor cd_S4070C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4070C2, buf);
    S4070C2 *dp, &lv = *(dp=new (buf) S4070C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4070C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4070C2)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S4070C2");
    test_class_info(&lv, &cd_S4070C2);
    dp->~S4070C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4070C2(Test_S4070C2, "S4070C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4070C2C1Ev();
extern void _ZN7S4070C2D1Ev();
Name_Map name_map_S4070C2[] = {
  NSPAIR(_ZN7S4070C2C1Ev),
  NSPAIR(_ZN7S4070C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S4070C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4070C2[];
extern void _ZN7S4070C2D1Ev();
extern void _ZN7S4070C2D0Ev();
extern void _ZN7S4070C22v2Ev();
static  VTBL_ENTRY vtc_S4070C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4070C2[0]),
  (VTBL_ENTRY)&_ZN7S4070C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4070C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4070C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4070C2[];
extern  VTBL_ENTRY _ZTV7S4070C2[];
Class_Descriptor cd_S4070C2 = {  "S4070C2", // class name
  bases_S4070C2, 1,
  &(vtc_S4070C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4070C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4070C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4070C1  : S4070C2 {
  ::S4067C6 s4070c1f0;
  virtual void  v1(); // _ZN7S4070C12v1Ev
  ~S4070C1(); // tgen
  S4070C1(); // tgen
};
//SIG(1 S4070C1) C1{ BC2{ BC3{ vd m} vd v2} v1 FC4{ FC5{ Fi[5] Fs[2] Fl Fc[84] Fi} Fc[64]}}


void  S4070C1 ::v1(){vfunc_called(this, "_ZN7S4070C12v1Ev");}
S4070C1 ::~S4070C1(){ note_dtor("S4070C1", this);} // tgen
S4070C1 ::S4070C1(){ note_ctor("S4070C1", this);} // tgen

static void Test_S4070C1()
{
  extern Class_Descriptor cd_S4070C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(25,47)];
    init_test(&cd_S4070C1, buf);
    S4070C1 *dp, &lv = *(dp=new (buf) S4070C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(192,184), "sizeof(S4070C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4070C1)");
    check_base_class_offset(lv, (S4055C3_nt*)(S4070C2*), 0, "S4070C1");
    check_base_class_offset(lv, (S4070C2*), 0, "S4070C1");
    check_field_offset(lv, s4070c1f0, ABISELECT(8,4), "S4070C1.s4070c1f0");
    test_class_info(&lv, &cd_S4070C1);
    dp->~S4070C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4070C1(Test_S4070C1, "S4070C1", ABISELECT(192,184));

#else // __cplusplus

extern void _ZN7S4070C1C1Ev();
extern void _ZN7S4070C1D1Ev();
Name_Map name_map_S4070C1[] = {
  NSPAIR(_ZN7S4070C1C1Ev),
  NSPAIR(_ZN7S4070C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4070C2;
extern VTBL_ENTRY _ZTI7S4070C2[];
extern  VTBL_ENTRY _ZTV7S4070C2[];
static Base_Class bases_S4070C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4070C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4070C1[];
extern void _ZN7S4070C1D1Ev();
extern void _ZN7S4070C1D0Ev();
extern void _ZN7S4070C22v2Ev();
extern void _ZN7S4070C12v1Ev();
static  VTBL_ENTRY vtc_S4070C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4070C1[0]),
  (VTBL_ENTRY)&_ZN7S4070C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4070C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4070C22v2Ev,
  (VTBL_ENTRY)&_ZN7S4070C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4070C1[];
extern  VTBL_ENTRY _ZTV7S4070C1[];
Class_Descriptor cd_S4070C1 = {  "S4070C1", // class name
  bases_S4070C1, 2,
  &(vtc_S4070C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(192,184), // object size
  NSPAIRA(_ZTI7S4070C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4070C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17955C3_nt  {
  __tsi64 s17955c3f0[4];
};
//SIG(-1 S17955C3_nt) C1{ FL[4]}



//skip512 S17955C3_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17955C2_nt  {
  ::S17955C3_nt s17955c2f0;
  void  mf17955c2(); // _ZN11S17955C2_nt9mf17955c2Ev
};
//SIG(-1 S17955C2_nt) C1{ m FC2{ FL[4]}}


void  S17955C2_nt ::mf17955c2(){}

//skip512 S17955C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17955C1  {
  void *s17955c1f0[2];
  ::S17955C2_nt s17955c1f1;
  ::S9538C13 s17955c1f2;
  char s17955c1f3;
  void  mf17955c1(); // _ZN8S17955C19mf17955c1Ev
};
//SIG(1 S17955C1) C1{ m Fp[2] FC2{ m FC3{ FL[4]}} FC4{ m FC5{ m Fp Fi FC6{ m}} Fi FC5} Fc}


void  S17955C1 ::mf17955c1(){}

static void Test_S17955C1()
{
  {
    init_simple_test("S17955C1");
    S17955C1 lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S17955C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17955C1)");
    check_field_offset(lv, s17955c1f0, 0, "S17955C1.s17955c1f0");
    check_field_offset(lv, s17955c1f1, ABISELECT(16,8), "S17955C1.s17955c1f1");
    check_field_offset(lv, s17955c1f2, ABISELECT(48,40), "S17955C1.s17955c1f2");
    check_field_offset(lv, s17955c1f3, ABISELECT(88,68), "S17955C1.s17955c1f3");
  }
}
static Arrange_To_Call_Me vS17955C1(Test_S17955C1, "S17955C1", ABISELECT(96,72));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17954C1  {
  void *s17954c1f0[2];
  ::S7924C10_nt s17954c1f1;
  ::S9538C13 s17954c1f2;
  char s17954c1f3;
  void  mf17954c1(); // _ZN8S17954C19mf17954c1Ev
};
//SIG(1 S17954C1) C1{ m Fp[2] FC2{ m FC3{ Fl[4]}} FC4{ m FC5{ m Fp Fi FC6{ m}} Fi FC5} Fc}


void  S17954C1 ::mf17954c1(){}

static void Test_S17954C1()
{
  {
    init_simple_test("S17954C1");
    S17954C1 lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S17954C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17954C1)");
    check_field_offset(lv, s17954c1f0, 0, "S17954C1.s17954c1f0");
    check_field_offset(lv, s17954c1f1, ABISELECT(16,8), "S17954C1.s17954c1f1");
    check_field_offset(lv, s17954c1f2, ABISELECT(48,24), "S17954C1.s17954c1f2");
    check_field_offset(lv, s17954c1f3, ABISELECT(88,52), "S17954C1.s17954c1f3");
  }
}
static Arrange_To_Call_Me vS17954C1(Test_S17954C1, "S17954C1", ABISELECT(96,56));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11983C1  {
  ::S15054C11 s11983c1f0;
  ::S15054C11 s11983c1f1;
  ::S15054C11 s11983c1f2;
  ::S15054C11 s11983c1f3;
  ::S15054C11 s11983c1f4;
  ::S15054C12 s11983c1f5;
  ::S15054C11 s11983c1f6;
  ::S15186C3_nt s11983c1f7;
};
//SIG(1 S11983C1) C1{ FC2{ m FC3{ m FC4{ FL}} FC3} FC2 FC2 FC2 FC2 FC3 FC2 FC5{ Fi[4]}}



static void Test_S11983C1()
{
  {
    init_simple_test("S11983C1");
    S11983C1 lv;
    check2(sizeof(lv), 120, "sizeof(S11983C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11983C1)");
    check_field_offset(lv, s11983c1f0, 0, "S11983C1.s11983c1f0");
    check_field_offset(lv, s11983c1f1, 16, "S11983C1.s11983c1f1");
    check_field_offset(lv, s11983c1f2, 32, "S11983C1.s11983c1f2");
    check_field_offset(lv, s11983c1f3, 48, "S11983C1.s11983c1f3");
    check_field_offset(lv, s11983c1f4, 64, "S11983C1.s11983c1f4");
    check_field_offset(lv, s11983c1f5, 80, "S11983C1.s11983c1f5");
    check_field_offset(lv, s11983c1f6, 88, "S11983C1.s11983c1f6");
    check_field_offset(lv, s11983c1f7, 104, "S11983C1.s11983c1f7");
  }
}
static Arrange_To_Call_Me vS11983C1(Test_S11983C1, "S11983C1", 120);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11982C1  {
  ::S15053C11 s11982c1f0;
  ::S15053C11 s11982c1f1;
  ::S15053C11 s11982c1f2;
  ::S15053C11 s11982c1f3;
  ::S15053C11 s11982c1f4;
  ::S15053C12 s11982c1f5;
  ::S15053C11 s11982c1f6;
  ::S15186C3_nt s11982c1f7;
};
//SIG(1 S11982C1) C1{ FC2{ m FC3{ m FC4{ Fl}} FC3} FC2 FC2 FC2 FC2 FC3 FC2 FC5{ Fi[4]}}



static void Test_S11982C1()
{
  {
    init_simple_test("S11982C1");
    S11982C1 lv;
    check2(sizeof(lv), ABISELECT(120,68), "sizeof(S11982C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11982C1)");
    check_field_offset(lv, s11982c1f0, 0, "S11982C1.s11982c1f0");
    check_field_offset(lv, s11982c1f1, ABISELECT(16,8), "S11982C1.s11982c1f1");
    check_field_offset(lv, s11982c1f2, ABISELECT(32,16), "S11982C1.s11982c1f2");
    check_field_offset(lv, s11982c1f3, ABISELECT(48,24), "S11982C1.s11982c1f3");
    check_field_offset(lv, s11982c1f4, ABISELECT(64,32), "S11982C1.s11982c1f4");
    check_field_offset(lv, s11982c1f5, ABISELECT(80,40), "S11982C1.s11982c1f5");
    check_field_offset(lv, s11982c1f6, ABISELECT(88,44), "S11982C1.s11982c1f6");
    check_field_offset(lv, s11982c1f7, ABISELECT(104,52), "S11982C1.s11982c1f7");
  }
}
static Arrange_To_Call_Me vS11982C1(Test_S11982C1, "S11982C1", ABISELECT(120,68));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9542C2  {
  virtual  ~S9542C2(); // _ZN7S9542C2D1Ev
  virtual void  v3(); // _ZN7S9542C22v3Ev
  virtual void  v4(); // _ZN7S9542C22v4Ev
  S9542C2(); // tgen
};
//SIG(-1 S9542C2) C1{ vd v1 v2}


 S9542C2 ::~S9542C2(){ note_dtor("S9542C2", this);}
void  S9542C2 ::v3(){vfunc_called(this, "_ZN7S9542C22v3Ev");}
void  S9542C2 ::v4(){vfunc_called(this, "_ZN7S9542C22v4Ev");}
S9542C2 ::S9542C2(){ note_ctor("S9542C2", this);} // tgen

static void Test_S9542C2()
{
  extern Class_Descriptor cd_S9542C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9542C2, buf);
    S9542C2 *dp, &lv = *(dp=new (buf) S9542C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9542C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9542C2)");
    test_class_info(&lv, &cd_S9542C2);
    dp->~S9542C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9542C2(Test_S9542C2, "S9542C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9542C2C1Ev();
extern void _ZN7S9542C2D1Ev();
Name_Map name_map_S9542C2[] = {
  NSPAIR(_ZN7S9542C2C1Ev),
  NSPAIR(_ZN7S9542C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9542C2[];
extern void _ZN7S9542C2D1Ev();
extern void _ZN7S9542C2D0Ev();
extern void _ZN7S9542C22v3Ev();
extern void _ZN7S9542C22v4Ev();
static  VTBL_ENTRY vtc_S9542C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9542C2[0]),
  (VTBL_ENTRY)&_ZN7S9542C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9542C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9542C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9542C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9542C2[];
extern  VTBL_ENTRY _ZTV7S9542C2[];
Class_Descriptor cd_S9542C2 = {  "S9542C2", // class name
  0,0,//no base classes
  &(vtc_S9542C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9542C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9542C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9542C1  : S9542C2 {
  ::S9538C13 s9542c1f0;
  void *s9542c1f1[2];
  virtual void  v1(); // _ZN7S9542C12v1Ev
  virtual void  v2(); // _ZN7S9542C12v2Ev
  ~S9542C1(); // tgen
  S9542C1(); // tgen
};
//SIG(1 S9542C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi FC4} Fp[2]}


void  S9542C1 ::v1(){vfunc_called(this, "_ZN7S9542C12v1Ev");}
void  S9542C1 ::v2(){vfunc_called(this, "_ZN7S9542C12v2Ev");}
S9542C1 ::~S9542C1(){ note_dtor("S9542C1", this);} // tgen
S9542C1 ::S9542C1(){ note_ctor("S9542C1", this);} // tgen

static void Test_S9542C1()
{
  extern Class_Descriptor cd_S9542C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S9542C1, buf);
    S9542C1 *dp, &lv = *(dp=new (buf) S9542C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S9542C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9542C1)");
    check_base_class_offset(lv, (S9542C2*), 0, "S9542C1");
    check_field_offset(lv, s9542c1f0, ABISELECT(8,4), "S9542C1.s9542c1f0");
    check_field_offset(lv, s9542c1f1, ABISELECT(48,32), "S9542C1.s9542c1f1");
    test_class_info(&lv, &cd_S9542C1);
    dp->~S9542C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9542C1(Test_S9542C1, "S9542C1", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN7S9542C1C1Ev();
extern void _ZN7S9542C1D1Ev();
Name_Map name_map_S9542C1[] = {
  NSPAIR(_ZN7S9542C1C1Ev),
  NSPAIR(_ZN7S9542C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9542C2;
extern VTBL_ENTRY _ZTI7S9542C2[];
extern  VTBL_ENTRY _ZTV7S9542C2[];
static Base_Class bases_S9542C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9542C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9542C1[];
extern void _ZN7S9542C1D1Ev();
extern void _ZN7S9542C1D0Ev();
extern void _ZN7S9542C22v3Ev();
extern void _ZN7S9542C22v4Ev();
extern void _ZN7S9542C12v1Ev();
extern void _ZN7S9542C12v2Ev();
static  VTBL_ENTRY vtc_S9542C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9542C1[0]),
  (VTBL_ENTRY)&_ZN7S9542C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9542C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9542C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9542C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9542C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9542C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9542C1[];
extern  VTBL_ENTRY _ZTV7S9542C1[];
Class_Descriptor cd_S9542C1 = {  "S9542C1", // class name
  bases_S9542C1, 1,
  &(vtc_S9542C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI7S9542C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9542C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12855C4  {
  int s12855c4f0;
  int s12855c4f1;
  int s12855c4f2;
  void *s12855c4f3;
  int s12855c4f4;
  int s12855c4f5;
};
//SIG(1 S12855C4) C1{ Fi[3] Fp Fi[2]}



static void Test_S12855C4()
{
  {
    init_simple_test("S12855C4");
    S12855C4 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S12855C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12855C4)");
    check_field_offset(lv, s12855c4f0, 0, "S12855C4.s12855c4f0");
    check_field_offset(lv, s12855c4f1, 4, "S12855C4.s12855c4f1");
    check_field_offset(lv, s12855c4f2, 8, "S12855C4.s12855c4f2");
    check_field_offset(lv, s12855c4f3, ABISELECT(16,12), "S12855C4.s12855c4f3");
    check_field_offset(lv, s12855c4f4, ABISELECT(24,16), "S12855C4.s12855c4f4");
    check_field_offset(lv, s12855c4f5, ABISELECT(28,20), "S12855C4.s12855c4f5");
  }
}
static Arrange_To_Call_Me vS12855C4(Test_S12855C4, "S12855C4", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S12855C2  {
  ::S8715C26_nt s12855c2f0;
  ::S12855C4 s12855c2f1;
  int s12855c2f2;
  char s12855c2f3[40];
};
//SIG(1 S12855C2) U1{ FC2{ Fi Fi Fi Fi} FC3{ Fi Fi Fi Fp Fi Fi} Fi Fc[40]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12855C1  {
  int s12855c1f0;
  ::S12855C2 s12855c1f1;
};
//SIG(1 S12855C1) C1{ Fi FU2{ FC3{ Fi Fi Fi Fi} FC4{ Fi Fi Fi Fp Fi Fi} Fi Fc[40]}}



static void Test_S12855C1()
{
  {
    init_simple_test("S12855C1");
    S12855C1 lv;
    check2(sizeof(lv), ABISELECT(48,44), "sizeof(S12855C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12855C1)");
    check_field_offset(lv, s12855c1f0, 0, "S12855C1.s12855c1f0");
    check_field_offset(lv, s12855c1f1, ABISELECT(8,4), "S12855C1.s12855c1f1");
  }
}
static Arrange_To_Call_Me vS12855C1(Test_S12855C1, "S12855C1", ABISELECT(48,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12117C1  {
  ::S3818C4 s12117c1f0;
};
//SIG(1 S12117C1) C1{ FC2{ m FL Fi FC3{ m Fp Fi FC4{ m}} Fi FL FC3 Fc FC3 Fi FC3}}



static void Test_S12117C1()
{
  {
    init_simple_test("S12117C1");
    S12117C1 lv;
    check2(sizeof(lv), ABISELECT(112,80), "sizeof(S12117C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12117C1)");
    check_field_offset(lv, s12117c1f0, 0, "S12117C1.s12117c1f0");
  }
}
static Arrange_To_Call_Me vS12117C1(Test_S12117C1, "S12117C1", ABISELECT(112,80));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18012C1  {
  void *s18012c1f0[2];
  ::S9061C3_nt s18012c1f1;
  ::S9538C13 s18012c1f2;
  char s18012c1f3;
  void  mf18012c1(); // _ZN8S18012C19mf18012c1Ev
};
//SIG(1 S18012C1) C1{ m Fp[2] FC2{ m FL[4]} FC3{ m FC4{ m Fp Fi FC5{ m}} Fi FC4} Fc}


void  S18012C1 ::mf18012c1(){}

static void Test_S18012C1()
{
  {
    init_simple_test("S18012C1");
    S18012C1 lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S18012C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18012C1)");
    check_field_offset(lv, s18012c1f0, 0, "S18012C1.s18012c1f0");
    check_field_offset(lv, s18012c1f1, ABISELECT(16,8), "S18012C1.s18012c1f1");
    check_field_offset(lv, s18012c1f2, ABISELECT(48,40), "S18012C1.s18012c1f2");
    check_field_offset(lv, s18012c1f3, ABISELECT(88,68), "S18012C1.s18012c1f3");
  }
}
static Arrange_To_Call_Me vS18012C1(Test_S18012C1, "S18012C1", ABISELECT(96,72));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4086C2  : S4055C3_nt {
  virtual  ~S4086C2(); // _ZN7S4086C2D1Ev
  virtual void  v3(); // _ZN7S4086C22v3Ev
  S4086C2(); // tgen
};
//SIG(-1 S4086C2) C1{ BC2{ vd m} vd v1}


 S4086C2 ::~S4086C2(){ note_dtor("S4086C2", this);}
void  S4086C2 ::v3(){vfunc_called(this, "_ZN7S4086C22v3Ev");}
S4086C2 ::S4086C2(){ note_ctor("S4086C2", this);} // tgen

static void Test_S4086C2()
{
  extern Class_Descriptor cd_S4086C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4086C2, buf);
    S4086C2 *dp, &lv = *(dp=new (buf) S4086C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4086C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4086C2)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S4086C2");
    test_class_info(&lv, &cd_S4086C2);
    dp->~S4086C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4086C2(Test_S4086C2, "S4086C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4086C2C1Ev();
extern void _ZN7S4086C2D1Ev();
Name_Map name_map_S4086C2[] = {
  NSPAIR(_ZN7S4086C2C1Ev),
  NSPAIR(_ZN7S4086C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S4086C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4086C2[];
extern void _ZN7S4086C2D1Ev();
extern void _ZN7S4086C2D0Ev();
extern void _ZN7S4086C22v3Ev();
static  VTBL_ENTRY vtc_S4086C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4086C2[0]),
  (VTBL_ENTRY)&_ZN7S4086C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4086C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4086C22v3Ev,
};
extern VTBL_ENTRY _ZTI7S4086C2[];
extern  VTBL_ENTRY _ZTV7S4086C2[];
Class_Descriptor cd_S4086C2 = {  "S4086C2", // class name
  bases_S4086C2, 1,
  &(vtc_S4086C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4086C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4086C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4086C4  : S4055C3_nt {
  virtual  ~S4086C4(); // _ZN7S4086C4D1Ev
  virtual void  v4(); // _ZN7S4086C42v4Ev
  S4086C4(); // tgen
};
//SIG(-1 S4086C4) C1{ BC2{ vd m} vd v1}


 S4086C4 ::~S4086C4(){ note_dtor("S4086C4", this);}
void  S4086C4 ::v4(){vfunc_called(this, "_ZN7S4086C42v4Ev");}
S4086C4 ::S4086C4(){ note_ctor("S4086C4", this);} // tgen

static void Test_S4086C4()
{
  extern Class_Descriptor cd_S4086C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4086C4, buf);
    S4086C4 *dp, &lv = *(dp=new (buf) S4086C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4086C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4086C4)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S4086C4");
    test_class_info(&lv, &cd_S4086C4);
    dp->~S4086C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4086C4(Test_S4086C4, "S4086C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4086C4C1Ev();
extern void _ZN7S4086C4D1Ev();
Name_Map name_map_S4086C4[] = {
  NSPAIR(_ZN7S4086C4C1Ev),
  NSPAIR(_ZN7S4086C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S4086C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4086C4[];
extern void _ZN7S4086C4D1Ev();
extern void _ZN7S4086C4D0Ev();
extern void _ZN7S4086C42v4Ev();
static  VTBL_ENTRY vtc_S4086C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4086C4[0]),
  (VTBL_ENTRY)&_ZN7S4086C4D1Ev,
  (VTBL_ENTRY)&_ZN7S4086C4D0Ev,
  (VTBL_ENTRY)&_ZN7S4086C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S4086C4[];
extern  VTBL_ENTRY _ZTV7S4086C4[];
Class_Descriptor cd_S4086C4 = {  "S4086C4", // class name
  bases_S4086C4, 1,
  &(vtc_S4086C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4086C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4086C4),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4086C1  : S4086C2 , S4086C4 {
  void *s4086c1f0;
  int s4086c1f1[2];
  __tsi64 s4086c1f2;
  virtual  ~S4086C1(); // _ZN7S4086C1D1Ev
  virtual void  v1(); // _ZN7S4086C12v1Ev
  virtual void  v2(); // _ZN7S4086C12v2Ev
  S4086C1(); // tgen
};
//SIG(1 S4086C1) C1{ BC2{ BC3{ vd m} vd v3} BC4{ BC3 vd v4} vd v1 v2 Fp Fi[2] FL}


 S4086C1 ::~S4086C1(){ note_dtor("S4086C1", this);}
void  S4086C1 ::v1(){vfunc_called(this, "_ZN7S4086C12v1Ev");}
void  S4086C1 ::v2(){vfunc_called(this, "_ZN7S4086C12v2Ev");}
S4086C1 ::S4086C1(){ note_ctor("S4086C1", this);} // tgen

static void Test_S4086C1()
{
  extern Class_Descriptor cd_S4086C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4086C1, buf);
    S4086C1 *dp, &lv = *(dp=new (buf) S4086C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4086C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4086C1)");
    check_base_class_offset(lv, (S4055C3_nt*)(S4086C2*), 0, "S4086C1");
    check_base_class_offset(lv, (S4086C2*), 0, "S4086C1");
    check_base_class_offset(lv, (S4055C3_nt*)(S4086C4*), ABISELECT(8,4), "S4086C1");
    check_base_class_offset(lv, (S4086C4*), ABISELECT(8,4), "S4086C1");
    check_field_offset(lv, s4086c1f0, ABISELECT(16,8), "S4086C1.s4086c1f0");
    check_field_offset(lv, s4086c1f1, ABISELECT(24,12), "S4086C1.s4086c1f1");
    check_field_offset(lv, s4086c1f2, ABISELECT(32,20), "S4086C1.s4086c1f2");
    test_class_info(&lv, &cd_S4086C1);
    dp->~S4086C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4086C1(Test_S4086C1, "S4086C1", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4086C1C1Ev();
extern void _ZN7S4086C1D1Ev();
Name_Map name_map_S4086C1[] = {
  NSPAIR(_ZN7S4086C1C1Ev),
  NSPAIR(_ZN7S4086C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4086C2;
extern VTBL_ENTRY _ZTI7S4086C2[];
extern  VTBL_ENTRY _ZTV7S4086C2[];
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4086C4;
extern VTBL_ENTRY _ZTI7S4086C4[];
extern  VTBL_ENTRY _ZTV7S4086C4[];
static Base_Class bases_S4086C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4086C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S4055C3_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S4086C4,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4086C1[];
extern void _ZN7S4086C1D1Ev();
extern void _ZN7S4086C1D0Ev();
extern void _ZN7S4086C22v3Ev();
extern void _ZN7S4086C12v1Ev();
extern void _ZN7S4086C12v2Ev();
extern void ABISELECT(_ZThn8_N7S4086C1D1Ev,_ZThn4_N7S4086C1D1Ev)();
extern void ABISELECT(_ZThn8_N7S4086C1D0Ev,_ZThn4_N7S4086C1D0Ev)();
extern void _ZN7S4086C42v4Ev();
static  VTBL_ENTRY vtc_S4086C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4086C1[0]),
  (VTBL_ENTRY)&_ZN7S4086C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4086C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4086C22v3Ev,
  (VTBL_ENTRY)&_ZN7S4086C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4086C12v2Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S4086C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S4086C1D1Ev,_ZThn4_N7S4086C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N7S4086C1D0Ev,_ZThn4_N7S4086C1D0Ev),
  (VTBL_ENTRY)&_ZN7S4086C42v4Ev,
};
extern VTBL_ENTRY _ZTI7S4086C1[];
extern  VTBL_ENTRY _ZTV7S4086C1[];
Class_Descriptor cd_S4086C1 = {  "S4086C1", // class name
  bases_S4086C1, 4,
  &(vtc_S4086C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4086C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S4086C1),12, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  4, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9543C2  {
  virtual  ~S9543C2(); // _ZN7S9543C2D1Ev
  virtual void  v3(); // _ZN7S9543C22v3Ev
  virtual void  v4(); // _ZN7S9543C22v4Ev
  S9543C2(); // tgen
};
//SIG(-1 S9543C2) C1{ vd v1 v2}


 S9543C2 ::~S9543C2(){ note_dtor("S9543C2", this);}
void  S9543C2 ::v3(){vfunc_called(this, "_ZN7S9543C22v3Ev");}
void  S9543C2 ::v4(){vfunc_called(this, "_ZN7S9543C22v4Ev");}
S9543C2 ::S9543C2(){ note_ctor("S9543C2", this);} // tgen

static void Test_S9543C2()
{
  extern Class_Descriptor cd_S9543C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9543C2, buf);
    S9543C2 *dp, &lv = *(dp=new (buf) S9543C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9543C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9543C2)");
    test_class_info(&lv, &cd_S9543C2);
    dp->~S9543C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9543C2(Test_S9543C2, "S9543C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9543C2C1Ev();
extern void _ZN7S9543C2D1Ev();
Name_Map name_map_S9543C2[] = {
  NSPAIR(_ZN7S9543C2C1Ev),
  NSPAIR(_ZN7S9543C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9543C2[];
extern void _ZN7S9543C2D1Ev();
extern void _ZN7S9543C2D0Ev();
extern void _ZN7S9543C22v3Ev();
extern void _ZN7S9543C22v4Ev();
static  VTBL_ENTRY vtc_S9543C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9543C2[0]),
  (VTBL_ENTRY)&_ZN7S9543C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9543C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9543C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9543C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9543C2[];
extern  VTBL_ENTRY _ZTV7S9543C2[];
Class_Descriptor cd_S9543C2 = {  "S9543C2", // class name
  0,0,//no base classes
  &(vtc_S9543C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9543C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9543C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9543C1  : S9543C2 {
  ::S9538C13 s9543c1f0;
  void *s9543c1f1;
  virtual void  v1(); // _ZN7S9543C12v1Ev
  virtual void  v2(); // _ZN7S9543C12v2Ev
  ~S9543C1(); // tgen
  S9543C1(); // tgen
};
//SIG(1 S9543C1) C1{ BC2{ vd v3 v4} v1 v2 FC3{ m FC4{ m Fp Fi FC5{ m}} Fi FC4} Fp}


void  S9543C1 ::v1(){vfunc_called(this, "_ZN7S9543C12v1Ev");}
void  S9543C1 ::v2(){vfunc_called(this, "_ZN7S9543C12v2Ev");}
S9543C1 ::~S9543C1(){ note_dtor("S9543C1", this);} // tgen
S9543C1 ::S9543C1(){ note_ctor("S9543C1", this);} // tgen

static void Test_S9543C1()
{
  extern Class_Descriptor cd_S9543C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,10)];
    init_test(&cd_S9543C1, buf);
    S9543C1 *dp, &lv = *(dp=new (buf) S9543C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S9543C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9543C1)");
    check_base_class_offset(lv, (S9543C2*), 0, "S9543C1");
    check_field_offset(lv, s9543c1f0, ABISELECT(8,4), "S9543C1.s9543c1f0");
    check_field_offset(lv, s9543c1f1, ABISELECT(48,32), "S9543C1.s9543c1f1");
    test_class_info(&lv, &cd_S9543C1);
    dp->~S9543C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9543C1(Test_S9543C1, "S9543C1", ABISELECT(56,36));

#else // __cplusplus

extern void _ZN7S9543C1C1Ev();
extern void _ZN7S9543C1D1Ev();
Name_Map name_map_S9543C1[] = {
  NSPAIR(_ZN7S9543C1C1Ev),
  NSPAIR(_ZN7S9543C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9543C2;
extern VTBL_ENTRY _ZTI7S9543C2[];
extern  VTBL_ENTRY _ZTV7S9543C2[];
static Base_Class bases_S9543C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9543C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9543C1[];
extern void _ZN7S9543C1D1Ev();
extern void _ZN7S9543C1D0Ev();
extern void _ZN7S9543C22v3Ev();
extern void _ZN7S9543C22v4Ev();
extern void _ZN7S9543C12v1Ev();
extern void _ZN7S9543C12v2Ev();
static  VTBL_ENTRY vtc_S9543C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9543C1[0]),
  (VTBL_ENTRY)&_ZN7S9543C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9543C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9543C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9543C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9543C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9543C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9543C1[];
extern  VTBL_ENTRY _ZTV7S9543C1[];
Class_Descriptor cd_S9543C1 = {  "S9543C1", // class name
  bases_S9543C1, 1,
  &(vtc_S9543C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,36), // object size
  NSPAIRA(_ZTI7S9543C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9543C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4076C2  : S4055C3_nt {
  virtual  ~S4076C2(); // _ZN7S4076C2D1Ev
  virtual void  v2(); // _ZN7S4076C22v2Ev
  S4076C2(); // tgen
};
//SIG(-1 S4076C2) C1{ BC2{ vd m} vd v1}


 S4076C2 ::~S4076C2(){ note_dtor("S4076C2", this);}
void  S4076C2 ::v2(){vfunc_called(this, "_ZN7S4076C22v2Ev");}
S4076C2 ::S4076C2(){ note_ctor("S4076C2", this);} // tgen

static void Test_S4076C2()
{
  extern Class_Descriptor cd_S4076C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4076C2, buf);
    S4076C2 *dp, &lv = *(dp=new (buf) S4076C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4076C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4076C2)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S4076C2");
    test_class_info(&lv, &cd_S4076C2);
    dp->~S4076C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4076C2(Test_S4076C2, "S4076C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4076C2C1Ev();
extern void _ZN7S4076C2D1Ev();
Name_Map name_map_S4076C2[] = {
  NSPAIR(_ZN7S4076C2C1Ev),
  NSPAIR(_ZN7S4076C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S4076C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4076C2[];
extern void _ZN7S4076C2D1Ev();
extern void _ZN7S4076C2D0Ev();
extern void _ZN7S4076C22v2Ev();
static  VTBL_ENTRY vtc_S4076C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4076C2[0]),
  (VTBL_ENTRY)&_ZN7S4076C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4076C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4076C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4076C2[];
extern  VTBL_ENTRY _ZTV7S4076C2[];
Class_Descriptor cd_S4076C2 = {  "S4076C2", // class name
  bases_S4076C2, 1,
  &(vtc_S4076C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4076C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4076C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4076C1  : S4076C2 {
  ::S8243C5 s4076c1f0;
  void *s4076c1f1;
  virtual  ~S4076C1(); // _ZN7S4076C1D1Ev
  virtual void  v1(); // _ZN7S4076C12v1Ev
  S4076C1(); // tgen
};
//SIG(1 S4076C1) C1{ BC2{ BC3{ vd m} vd v2} vd v1 FC4{ m Fi Fp Fi Fp Fc FL} Fp}


 S4076C1 ::~S4076C1(){ note_dtor("S4076C1", this);}
void  S4076C1 ::v1(){vfunc_called(this, "_ZN7S4076C12v1Ev");}
S4076C1 ::S4076C1(){ note_ctor("S4076C1", this);} // tgen

static void Test_S4076C1()
{
  extern Class_Descriptor cd_S4076C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,10)];
    init_test(&cd_S4076C1, buf);
    S4076C1 *dp, &lv = *(dp=new (buf) S4076C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S4076C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4076C1)");
    check_base_class_offset(lv, (S4055C3_nt*)(S4076C2*), 0, "S4076C1");
    check_base_class_offset(lv, (S4076C2*), 0, "S4076C1");
    check_field_offset(lv, s4076c1f0, ABISELECT(8,4), "S4076C1.s4076c1f0");
    check_field_offset(lv, s4076c1f1, ABISELECT(56,32), "S4076C1.s4076c1f1");
    test_class_info(&lv, &cd_S4076C1);
    dp->~S4076C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4076C1(Test_S4076C1, "S4076C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN7S4076C1C1Ev();
extern void _ZN7S4076C1D1Ev();
Name_Map name_map_S4076C1[] = {
  NSPAIR(_ZN7S4076C1C1Ev),
  NSPAIR(_ZN7S4076C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4076C2;
extern VTBL_ENTRY _ZTI7S4076C2[];
extern  VTBL_ENTRY _ZTV7S4076C2[];
static Base_Class bases_S4076C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4076C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4076C1[];
extern void _ZN7S4076C1D1Ev();
extern void _ZN7S4076C1D0Ev();
extern void _ZN7S4076C22v2Ev();
extern void _ZN7S4076C12v1Ev();
static  VTBL_ENTRY vtc_S4076C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4076C1[0]),
  (VTBL_ENTRY)&_ZN7S4076C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4076C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4076C22v2Ev,
  (VTBL_ENTRY)&_ZN7S4076C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4076C1[];
extern  VTBL_ENTRY _ZTV7S4076C1[];
Class_Descriptor cd_S4076C1 = {  "S4076C1", // class name
  bases_S4076C1, 2,
  &(vtc_S4076C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI7S4076C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4076C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4075C2  : S4055C3_nt {
  virtual  ~S4075C2(); // _ZN7S4075C2D1Ev
  virtual void  v2(); // _ZN7S4075C22v2Ev
  S4075C2(); // tgen
};
//SIG(-1 S4075C2) C1{ BC2{ vd m} vd v1}


 S4075C2 ::~S4075C2(){ note_dtor("S4075C2", this);}
void  S4075C2 ::v2(){vfunc_called(this, "_ZN7S4075C22v2Ev");}
S4075C2 ::S4075C2(){ note_ctor("S4075C2", this);} // tgen

static void Test_S4075C2()
{
  extern Class_Descriptor cd_S4075C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4075C2, buf);
    S4075C2 *dp, &lv = *(dp=new (buf) S4075C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4075C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4075C2)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S4075C2");
    test_class_info(&lv, &cd_S4075C2);
    dp->~S4075C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4075C2(Test_S4075C2, "S4075C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4075C2C1Ev();
extern void _ZN7S4075C2D1Ev();
Name_Map name_map_S4075C2[] = {
  NSPAIR(_ZN7S4075C2C1Ev),
  NSPAIR(_ZN7S4075C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S4075C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4075C2[];
extern void _ZN7S4075C2D1Ev();
extern void _ZN7S4075C2D0Ev();
extern void _ZN7S4075C22v2Ev();
static  VTBL_ENTRY vtc_S4075C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4075C2[0]),
  (VTBL_ENTRY)&_ZN7S4075C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4075C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4075C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4075C2[];
extern  VTBL_ENTRY _ZTV7S4075C2[];
Class_Descriptor cd_S4075C2 = {  "S4075C2", // class name
  bases_S4075C2, 1,
  &(vtc_S4075C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4075C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4075C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4075C1  : S4075C2 {
  ::S4068C5 s4075c1f0;
  virtual void  v1(); // _ZN7S4075C12v1Ev
  ~S4075C1(); // tgen
  S4075C1(); // tgen
};
//SIG(1 S4075C1) C1{ BC2{ BC3{ vd m} vd v2} v1 FC4{ Fi[5] Fs[2] FL Fc[84] Fi}}


void  S4075C1 ::v1(){vfunc_called(this, "_ZN7S4075C12v1Ev");}
S4075C1 ::~S4075C1(){ note_dtor("S4075C1", this);} // tgen
S4075C1 ::S4075C1(){ note_ctor("S4075C1", this);} // tgen

static void Test_S4075C1()
{
  extern Class_Descriptor cd_S4075C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,32)];
    init_test(&cd_S4075C1, buf);
    S4075C1 *dp, &lv = *(dp=new (buf) S4075C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,124), "sizeof(S4075C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4075C1)");
    check_base_class_offset(lv, (S4055C3_nt*)(S4075C2*), 0, "S4075C1");
    check_base_class_offset(lv, (S4075C2*), 0, "S4075C1");
    check_field_offset(lv, s4075c1f0, ABISELECT(8,4), "S4075C1.s4075c1f0");
    test_class_info(&lv, &cd_S4075C1);
    dp->~S4075C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4075C1(Test_S4075C1, "S4075C1", ABISELECT(128,124));

#else // __cplusplus

extern void _ZN7S4075C1C1Ev();
extern void _ZN7S4075C1D1Ev();
Name_Map name_map_S4075C1[] = {
  NSPAIR(_ZN7S4075C1C1Ev),
  NSPAIR(_ZN7S4075C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4075C2;
extern VTBL_ENTRY _ZTI7S4075C2[];
extern  VTBL_ENTRY _ZTV7S4075C2[];
static Base_Class bases_S4075C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4075C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4075C1[];
extern void _ZN7S4075C1D1Ev();
extern void _ZN7S4075C1D0Ev();
extern void _ZN7S4075C22v2Ev();
extern void _ZN7S4075C12v1Ev();
static  VTBL_ENTRY vtc_S4075C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4075C1[0]),
  (VTBL_ENTRY)&_ZN7S4075C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4075C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4075C22v2Ev,
  (VTBL_ENTRY)&_ZN7S4075C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4075C1[];
extern  VTBL_ENTRY _ZTV7S4075C1[];
Class_Descriptor cd_S4075C1 = {  "S4075C1", // class name
  bases_S4075C1, 2,
  &(vtc_S4075C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,124), // object size
  NSPAIRA(_ZTI7S4075C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4075C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4074C2  : S4055C3_nt {
  virtual  ~S4074C2(); // _ZN7S4074C2D1Ev
  virtual void  v2(); // _ZN7S4074C22v2Ev
  S4074C2(); // tgen
};
//SIG(-1 S4074C2) C1{ BC2{ vd m} vd v1}


 S4074C2 ::~S4074C2(){ note_dtor("S4074C2", this);}
void  S4074C2 ::v2(){vfunc_called(this, "_ZN7S4074C22v2Ev");}
S4074C2 ::S4074C2(){ note_ctor("S4074C2", this);} // tgen

static void Test_S4074C2()
{
  extern Class_Descriptor cd_S4074C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S4074C2, buf);
    S4074C2 *dp, &lv = *(dp=new (buf) S4074C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S4074C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4074C2)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S4074C2");
    test_class_info(&lv, &cd_S4074C2);
    dp->~S4074C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4074C2(Test_S4074C2, "S4074C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S4074C2C1Ev();
extern void _ZN7S4074C2D1Ev();
Name_Map name_map_S4074C2[] = {
  NSPAIR(_ZN7S4074C2C1Ev),
  NSPAIR(_ZN7S4074C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S4074C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4074C2[];
extern void _ZN7S4074C2D1Ev();
extern void _ZN7S4074C2D0Ev();
extern void _ZN7S4074C22v2Ev();
static  VTBL_ENTRY vtc_S4074C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4074C2[0]),
  (VTBL_ENTRY)&_ZN7S4074C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4074C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4074C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S4074C2[];
extern  VTBL_ENTRY _ZTV7S4074C2[];
Class_Descriptor cd_S4074C2 = {  "S4074C2", // class name
  bases_S4074C2, 1,
  &(vtc_S4074C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S4074C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4074C2),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S4074C1  : S4074C2 {
  ::S4067C5 s4074c1f0;
  virtual void  v1(); // _ZN7S4074C12v1Ev
  ~S4074C1(); // tgen
  S4074C1(); // tgen
};
//SIG(1 S4074C1) C1{ BC2{ BC3{ vd m} vd v2} v1 FC4{ Fi[5] Fs[2] Fl Fc[84] Fi}}


void  S4074C1 ::v1(){vfunc_called(this, "_ZN7S4074C12v1Ev");}
S4074C1 ::~S4074C1(){ note_dtor("S4074C1", this);} // tgen
S4074C1 ::S4074C1(){ note_ctor("S4074C1", this);} // tgen

static void Test_S4074C1()
{
  extern Class_Descriptor cd_S4074C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,31)];
    init_test(&cd_S4074C1, buf);
    S4074C1 *dp, &lv = *(dp=new (buf) S4074C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,120), "sizeof(S4074C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4074C1)");
    check_base_class_offset(lv, (S4055C3_nt*)(S4074C2*), 0, "S4074C1");
    check_base_class_offset(lv, (S4074C2*), 0, "S4074C1");
    check_field_offset(lv, s4074c1f0, ABISELECT(8,4), "S4074C1.s4074c1f0");
    test_class_info(&lv, &cd_S4074C1);
    dp->~S4074C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4074C1(Test_S4074C1, "S4074C1", ABISELECT(128,120));

#else // __cplusplus

extern void _ZN7S4074C1C1Ev();
extern void _ZN7S4074C1D1Ev();
Name_Map name_map_S4074C1[] = {
  NSPAIR(_ZN7S4074C1C1Ev),
  NSPAIR(_ZN7S4074C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
extern Class_Descriptor cd_S4074C2;
extern VTBL_ENTRY _ZTI7S4074C2[];
extern  VTBL_ENTRY _ZTV7S4074C2[];
static Base_Class bases_S4074C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S4074C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S4074C1[];
extern void _ZN7S4074C1D1Ev();
extern void _ZN7S4074C1D0Ev();
extern void _ZN7S4074C22v2Ev();
extern void _ZN7S4074C12v1Ev();
static  VTBL_ENTRY vtc_S4074C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4074C1[0]),
  (VTBL_ENTRY)&_ZN7S4074C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4074C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4074C22v2Ev,
  (VTBL_ENTRY)&_ZN7S4074C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4074C1[];
extern  VTBL_ENTRY _ZTV7S4074C1[];
Class_Descriptor cd_S4074C1 = {  "S4074C1", // class name
  bases_S4074C1, 2,
  &(vtc_S4074C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(128,120), // object size
  NSPAIRA(_ZTI7S4074C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4074C1),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5776C2_nt  {
  int s5776c2f0[2];
  char s5776c2f1[2];
  void  mf5776c2(); // _ZN10S5776C2_nt8mf5776c2Ev
};
//SIG(-1 S5776C2_nt) C1{ m Fi[2] Fc[2]}


void  S5776C2_nt ::mf5776c2(){}

//skip512 S5776C2_nt

#else // __cplusplus

Class_Descriptor cd_S5776C2_nt = {  "S5776C2_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  12, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5776C1  : S5776C2_nt {
  int s5776c1f0[2];
  ::S15054C11 s5776c1f1;
  int s5776c1f2;
};
//SIG(1 S5776C1) C1{ BC2{ m Fi[2] Fc[2]} Fi[2] FC3{ m FC4{ m FC5{ FL}} FC4} Fi}



static void Test_S5776C1()
{
  extern Class_Descriptor cd_S5776C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S5776C1, buf);
    S5776C1 &lv = *(new (buf) S5776C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S5776C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5776C1)");
    check_base_class_offset(lv, (S5776C2_nt*), 0, "S5776C1");
    check_field_offset(lv, s5776c1f0, 12, "S5776C1.s5776c1f0");
    check_field_offset(lv, s5776c1f1, ABISELECT(24,20), "S5776C1.s5776c1f1");
    check_field_offset(lv, s5776c1f2, ABISELECT(40,36), "S5776C1.s5776c1f2");
    test_class_info(&lv, &cd_S5776C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5776C1(Test_S5776C1, "S5776C1", ABISELECT(48,40));

#else // __cplusplus

extern Class_Descriptor cd_S5776C2_nt;
static Base_Class bases_S5776C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5776C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5776C1 = {  "S5776C1", // class name
  bases_S5776C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(48,40), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5775C1  : S5776C2_nt {
  int s5775c1f0[2];
  ::S15053C11 s5775c1f1;
  int s5775c1f2;
};
//SIG(1 S5775C1) C1{ BC2{ m Fi[2] Fc[2]} Fi[2] FC3{ m FC4{ m FC5{ Fl}} FC4} Fi}



static void Test_S5775C1()
{
  extern Class_Descriptor cd_S5775C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S5775C1, buf);
    S5775C1 &lv = *(new (buf) S5775C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5775C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5775C1)");
    check_base_class_offset(lv, (S5776C2_nt*), 0, "S5775C1");
    check_field_offset(lv, s5775c1f0, 12, "S5775C1.s5775c1f0");
    check_field_offset(lv, s5775c1f1, ABISELECT(24,20), "S5775C1.s5775c1f1");
    check_field_offset(lv, s5775c1f2, ABISELECT(40,28), "S5775C1.s5775c1f2");
    test_class_info(&lv, &cd_S5775C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5775C1(Test_S5775C1, "S5775C1", ABISELECT(48,32));

#else // __cplusplus

extern Class_Descriptor cd_S5776C2_nt;
static Base_Class bases_S5775C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5776C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5775C1 = {  "S5775C1", // class name
  bases_S5775C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(48,32), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6165C1  : S8663C5_nt {
  ::S4068C6 s6165c1f0;
};
//SIG(1 S6165C1) C1{ BC2{ m} FC3{ FC4{ Fi[5] Fs[2] FL Fc[84] Fi} Fc[64]}}



static void Test_S6165C1()
{
  extern Class_Descriptor cd_S6165C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,47)];
    init_test(&cd_S6165C1, buf);
    S6165C1 &lv = *(new (buf) S6165C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 184, "sizeof(S6165C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6165C1)");
    check_base_class_offset(lv, (S8663C5_nt*), 0, "S6165C1");
    check_field_offset(lv, s6165c1f0, 0, "S6165C1.s6165c1f0");
    test_class_info(&lv, &cd_S6165C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6165C1(Test_S6165C1, "S6165C1", 184);

#else // __cplusplus

extern Class_Descriptor cd_S8663C5_nt;
static Base_Class bases_S6165C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8663C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S6165C1 = {  "S6165C1", // class name
  bases_S6165C1, 1,
  0, // no vftv
  0, //no vtt
  184, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6164C1  : S8663C5_nt {
  ::S4067C6 s6164c1f0;
};
//SIG(1 S6164C1) C1{ BC2{ m} FC3{ FC4{ Fi[5] Fs[2] Fl Fc[84] Fi} Fc[64]}}



static void Test_S6164C1()
{
  extern Class_Descriptor cd_S6164C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,46)];
    init_test(&cd_S6164C1, buf);
    S6164C1 &lv = *(new (buf) S6164C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,180), "sizeof(S6164C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6164C1)");
    check_base_class_offset(lv, (S8663C5_nt*), 0, "S6164C1");
    check_field_offset(lv, s6164c1f0, 0, "S6164C1.s6164c1f0");
    test_class_info(&lv, &cd_S6164C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6164C1(Test_S6164C1, "S6164C1", ABISELECT(184,180));

#else // __cplusplus

extern Class_Descriptor cd_S8663C5_nt;
static Base_Class bases_S6164C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8663C5_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S6164C1 = {  "S6164C1", // class name
  bases_S6164C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(184,180), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5774C1  : S5776C2_nt {
  ::S15054C11 s5774c1f0;
  int s5774c1f1;
};
//SIG(1 S5774C1) C1{ BC2{ m Fi[2] Fc[2]} FC3{ m FC4{ m FC5{ FL}} FC4} Fi}



static void Test_S5774C1()
{
  extern Class_Descriptor cd_S5774C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S5774C1, buf);
    S5774C1 &lv = *(new (buf) S5774C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S5774C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5774C1)");
    check_base_class_offset(lv, (S5776C2_nt*), 0, "S5774C1");
    check_field_offset(lv, s5774c1f0, ABISELECT(16,12), "S5774C1.s5774c1f0");
    check_field_offset(lv, s5774c1f1, ABISELECT(32,28), "S5774C1.s5774c1f1");
    test_class_info(&lv, &cd_S5774C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5774C1(Test_S5774C1, "S5774C1", ABISELECT(40,32));

#else // __cplusplus

extern Class_Descriptor cd_S5776C2_nt;
static Base_Class bases_S5774C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5776C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5774C1 = {  "S5774C1", // class name
  bases_S5774C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,32), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5773C1  : S5776C2_nt {
  ::S15053C11 s5773c1f0;
  int s5773c1f1;
};
//SIG(1 S5773C1) C1{ BC2{ m Fi[2] Fc[2]} FC3{ m FC4{ m FC5{ Fl}} FC4} Fi}



static void Test_S5773C1()
{
  extern Class_Descriptor cd_S5773C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S5773C1, buf);
    S5773C1 &lv = *(new (buf) S5773C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S5773C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5773C1)");
    check_base_class_offset(lv, (S5776C2_nt*), 0, "S5773C1");
    check_field_offset(lv, s5773c1f0, ABISELECT(16,12), "S5773C1.s5773c1f0");
    check_field_offset(lv, s5773c1f1, ABISELECT(32,20), "S5773C1.s5773c1f1");
    test_class_info(&lv, &cd_S5773C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5773C1(Test_S5773C1, "S5773C1", ABISELECT(40,24));

#else // __cplusplus

extern Class_Descriptor cd_S5776C2_nt;
static Base_Class bases_S5773C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5776C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5773C1 = {  "S5773C1", // class name
  bases_S5773C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(40,24), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12298C1  {
  int s12298c1f0;
  char s12298c1f1[4];
  __tsi64 s12298c1f2;
  ::S8715C38 s12298c1f3;
  char s12298c1f4[38];
  int s12298c1f5[5];
  __tsi64 s12298c1f6;
  int s12298c1f7[2];
};
//SIG(1 S12298C1) C1{ Fi Fc[4] FL FC2{ Fc[6]} Fc[38] Fi[5] FL Fi[2]}



static void Test_S12298C1()
{
  {
    init_simple_test("S12298C1");
    S12298C1 lv;
    check2(sizeof(lv), 96, "sizeof(S12298C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12298C1)");
    check_field_offset(lv, s12298c1f0, 0, "S12298C1.s12298c1f0");
    check_field_offset(lv, s12298c1f1, 4, "S12298C1.s12298c1f1");
    check_field_offset(lv, s12298c1f2, 8, "S12298C1.s12298c1f2");
    check_field_offset(lv, s12298c1f3, 16, "S12298C1.s12298c1f3");
    check_field_offset(lv, s12298c1f4, 22, "S12298C1.s12298c1f4");
    check_field_offset(lv, s12298c1f5, 60, "S12298C1.s12298c1f5");
    check_field_offset(lv, s12298c1f6, 80, "S12298C1.s12298c1f6");
    check_field_offset(lv, s12298c1f7, 88, "S12298C1.s12298c1f7");
  }
}
static Arrange_To_Call_Me vS12298C1(Test_S12298C1, "S12298C1", 96);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12297C1  {
  int s12297c1f0;
  char s12297c1f1[4];
  long s12297c1f2;
  ::S8715C38 s12297c1f3;
  char s12297c1f4[38];
  int s12297c1f5[5];
  long s12297c1f6;
  int s12297c1f7[2];
};
//SIG(1 S12297C1) C1{ Fi Fc[4] Fl FC2{ Fc[6]} Fc[38] Fi[5] Fl Fi[2]}



static void Test_S12297C1()
{
  {
    init_simple_test("S12297C1");
    S12297C1 lv;
    check2(sizeof(lv), ABISELECT(96,88), "sizeof(S12297C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12297C1)");
    check_field_offset(lv, s12297c1f0, 0, "S12297C1.s12297c1f0");
    check_field_offset(lv, s12297c1f1, 4, "S12297C1.s12297c1f1");
    check_field_offset(lv, s12297c1f2, 8, "S12297C1.s12297c1f2");
    check_field_offset(lv, s12297c1f3, ABISELECT(16,12), "S12297C1.s12297c1f3");
    check_field_offset(lv, s12297c1f4, ABISELECT(22,18), "S12297C1.s12297c1f4");
    check_field_offset(lv, s12297c1f5, ABISELECT(60,56), "S12297C1.s12297c1f5");
    check_field_offset(lv, s12297c1f6, ABISELECT(80,76), "S12297C1.s12297c1f6");
    check_field_offset(lv, s12297c1f7, ABISELECT(88,80), "S12297C1.s12297c1f7");
  }
}
static Arrange_To_Call_Me vS12297C1(Test_S12297C1, "S12297C1", ABISELECT(96,88));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

union  S12856C2  {
  ::S8715C26_nt s12856c2f0;
  ::S8715C15 s12856c2f1;
  void *s12856c2f2;
  char s12856c2f3[32];
};
//SIG(1 S12856C2) U1{ FC2{ Fi Fi Fi Fi} FC3{ Fp Fi} Fp Fc[32]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S12856C1  {
  int s12856c1f0;
  ::S12856C2 s12856c1f1;
};
//SIG(1 S12856C1) C1{ Fi FU2{ FC3{ Fi Fi Fi Fi} FC4{ Fp Fi} Fp Fc[32]}}



static void Test_S12856C1()
{
  {
    init_simple_test("S12856C1");
    S12856C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S12856C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12856C1)");
    check_field_offset(lv, s12856c1f0, 0, "S12856C1.s12856c1f0");
    check_field_offset(lv, s12856c1f1, ABISELECT(8,4), "S12856C1.s12856c1f1");
  }
}
static Arrange_To_Call_Me vS12856C1(Test_S12856C1, "S12856C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3933C3_nt  {
  __tsi64 s3933c3f0;
  void  mf3933c3(); // _ZN10S3933C3_nt8mf3933c3Ev
  virtual  ~S3933C3_nt(); // _ZN10S3933C3_ntD1Ev
  S3933C3_nt(); // tgen
};
//SIG(-1 S3933C3_nt) C1{ vd m FL}


void  S3933C3_nt ::mf3933c3(){}
 S3933C3_nt ::~S3933C3_nt(){ note_dtor("S3933C3_nt", this);}
S3933C3_nt ::S3933C3_nt(){ note_ctor("S3933C3_nt", this);} // tgen

//skip512 S3933C3_nt

#else // __cplusplus

extern void _ZN10S3933C3_ntC1Ev();
extern void _ZN10S3933C3_ntD1Ev();
Name_Map name_map_S3933C3_nt[] = {
  NSPAIR(_ZN10S3933C3_ntC1Ev),
  NSPAIR(_ZN10S3933C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3933C3_nt[];
extern void _ZN10S3933C3_ntD1Ev();
extern void _ZN10S3933C3_ntD0Ev();
static  VTBL_ENTRY vtc_S3933C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3933C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3933C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3933C3_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3933C3_nt[];
VTBL_ENTRY *P__ZTI10S3933C3_nt = _ZTI10S3933C3_nt; 
extern  VTBL_ENTRY _ZTV10S3933C3_nt[];
Class_Descriptor cd_S3933C3_nt = {  "S3933C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3933C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S3933C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3933C3_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3933C2_nt  : S3933C3_nt {
  int s3933c2f0;
  virtual  ~S3933C2_nt(); // _ZN10S3933C2_ntD1Ev
  S3933C2_nt(); // tgen
};
//SIG(-1 S3933C2_nt) C1{ BC2{ vd m FL} vd Fi}


 S3933C2_nt ::~S3933C2_nt(){ note_dtor("S3933C2_nt", this);}
S3933C2_nt ::S3933C2_nt(){ note_ctor("S3933C2_nt", this);} // tgen

//skip512 S3933C2_nt

#else // __cplusplus

extern void _ZN10S3933C2_ntC1Ev();
extern void _ZN10S3933C2_ntD1Ev();
Name_Map name_map_S3933C2_nt[] = {
  NSPAIR(_ZN10S3933C2_ntC1Ev),
  NSPAIR(_ZN10S3933C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3933C3_nt;
extern VTBL_ENTRY _ZTI10S3933C3_nt[];
extern  VTBL_ENTRY _ZTV10S3933C3_nt[];
static Base_Class bases_S3933C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3933C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI10S3933C2_nt[];
extern void _ZN10S3933C2_ntD1Ev();
extern void _ZN10S3933C2_ntD0Ev();
static  VTBL_ENTRY vtc_S3933C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3933C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3933C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3933C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S3933C2_nt[];
VTBL_ENTRY *P__ZTI10S3933C2_nt = _ZTI10S3933C2_nt; 
extern  VTBL_ENTRY _ZTV10S3933C2_nt[];
Class_Descriptor cd_S3933C2_nt = {  "S3933C2_nt", // class name
  bases_S3933C2_nt, 1,
  &(vtc_S3933C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI10S3933C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3933C2_nt),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S3933C1  : S3933C2_nt {
  ::S9670C5 s3933c1f0;
  virtual  ~S3933C1(); // _ZN7S3933C1D1Ev
  S3933C1(); // tgen
};
//SIG(1 S3933C1) C1{ BC2{ BC3{ vd m FL} vd Fi} vd FC4{ vd m Fc FL}}


 S3933C1 ::~S3933C1(){ note_dtor("S3933C1", this);}
S3933C1 ::S3933C1(){ note_ctor("S3933C1", this);} // tgen

static void Test_S3933C1()
{
  extern Class_Descriptor cd_S3933C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S3933C1, buf);
    S3933C1 *dp, &lv = *(dp=new (buf) S3933C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S3933C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3933C1)");
    check_base_class_offset(lv, (S3933C3_nt*)(S3933C2_nt*), 0, "S3933C1");
    check_base_class_offset(lv, (S3933C2_nt*), 0, "S3933C1");
    check_field_offset(lv, s3933c1f0, ABISELECT(24,16), "S3933C1.s3933c1f0");
    test_class_info(&lv, &cd_S3933C1);
    dp->~S3933C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3933C1(Test_S3933C1, "S3933C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S3933C1C1Ev();
extern void _ZN7S3933C1D1Ev();
Name_Map name_map_S3933C1[] = {
  NSPAIR(_ZN7S3933C1C1Ev),
  NSPAIR(_ZN7S3933C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3933C3_nt;
extern VTBL_ENTRY _ZTI10S3933C3_nt[];
extern  VTBL_ENTRY _ZTV10S3933C3_nt[];
extern Class_Descriptor cd_S3933C2_nt;
extern VTBL_ENTRY _ZTI10S3933C2_nt[];
extern  VTBL_ENTRY _ZTV10S3933C2_nt[];
static Base_Class bases_S3933C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3933C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3933C2_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S3933C1[];
extern void _ZN7S3933C1D1Ev();
extern void _ZN7S3933C1D0Ev();
static  VTBL_ENTRY vtc_S3933C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3933C1[0]),
  (VTBL_ENTRY)&_ZN7S3933C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3933C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S3933C1[];
extern  VTBL_ENTRY _ZTV7S3933C1[];
Class_Descriptor cd_S3933C1 = {  "S3933C1", // class name
  bases_S3933C1, 2,
  &(vtc_S3933C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S3933C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3933C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  2, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10746C1  {
  char s10746c1f0[21];
  int s10746c1f1[2];
  char s10746c1f2[32];
  int s10746c1f3[2];
  char s10746c1f4[64];
  int s10746c1f5;
  char s10746c1f6;
};
//SIG(1 S10746C1) C1{ Fc[21] Fi[2] Fc[32] Fi[2] Fc[64] Fi Fc}



static void Test_S10746C1()
{
  {
    init_simple_test("S10746C1");
    S10746C1 lv;
    check2(sizeof(lv), 144, "sizeof(S10746C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10746C1)");
    check_field_offset(lv, s10746c1f0, 0, "S10746C1.s10746c1f0");
    check_field_offset(lv, s10746c1f1, 24, "S10746C1.s10746c1f1");
    check_field_offset(lv, s10746c1f2, 32, "S10746C1.s10746c1f2");
    check_field_offset(lv, s10746c1f3, 64, "S10746C1.s10746c1f3");
    check_field_offset(lv, s10746c1f4, 72, "S10746C1.s10746c1f4");
    check_field_offset(lv, s10746c1f5, 136, "S10746C1.s10746c1f5");
    check_field_offset(lv, s10746c1f6, 140, "S10746C1.s10746c1f6");
  }
}
static Arrange_To_Call_Me vS10746C1(Test_S10746C1, "S10746C1", 144);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11985C1  {
  ::S15054C11 s11985c1f0;
  ::S15054C11 s11985c1f1;
  ::S15186C3_nt s11985c1f2;
};
//SIG(1 S11985C1) C1{ FC2{ m FC3{ m FC4{ FL}} FC3} FC2 FC5{ Fi[4]}}



static void Test_S11985C1()
{
  {
    init_simple_test("S11985C1");
    S11985C1 lv;
    check2(sizeof(lv), 48, "sizeof(S11985C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11985C1)");
    check_field_offset(lv, s11985c1f0, 0, "S11985C1.s11985c1f0");
    check_field_offset(lv, s11985c1f1, 16, "S11985C1.s11985c1f1");
    check_field_offset(lv, s11985c1f2, 32, "S11985C1.s11985c1f2");
  }
}
static Arrange_To_Call_Me vS11985C1(Test_S11985C1, "S11985C1", 48);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11984C1  {
  ::S15053C11 s11984c1f0;
  ::S15053C11 s11984c1f1;
  ::S15186C3_nt s11984c1f2;
};
//SIG(1 S11984C1) C1{ FC2{ m FC3{ m FC4{ Fl}} FC3} FC2 FC5{ Fi[4]}}



static void Test_S11984C1()
{
  {
    init_simple_test("S11984C1");
    S11984C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S11984C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11984C1)");
    check_field_offset(lv, s11984c1f0, 0, "S11984C1.s11984c1f0");
    check_field_offset(lv, s11984c1f1, ABISELECT(16,8), "S11984C1.s11984c1f1");
    check_field_offset(lv, s11984c1f2, ABISELECT(32,16), "S11984C1.s11984c1f2");
  }
}
static Arrange_To_Call_Me vS11984C1(Test_S11984C1, "S11984C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12300C1  {
  int s12300c1f0;
  char s12300c1f1[4];
  __tsi64 s12300c1f2;
  ::S8715C38 s12300c1f3;
  char s12300c1f4[38];
  int s12300c1f5[5];
  __tsi64 s12300c1f6;
};
//SIG(1 S12300C1) C1{ Fi Fc[4] FL FC2{ Fc[6]} Fc[38] Fi[5] FL}



static void Test_S12300C1()
{
  {
    init_simple_test("S12300C1");
    S12300C1 lv;
    check2(sizeof(lv), 88, "sizeof(S12300C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12300C1)");
    check_field_offset(lv, s12300c1f0, 0, "S12300C1.s12300c1f0");
    check_field_offset(lv, s12300c1f1, 4, "S12300C1.s12300c1f1");
    check_field_offset(lv, s12300c1f2, 8, "S12300C1.s12300c1f2");
    check_field_offset(lv, s12300c1f3, 16, "S12300C1.s12300c1f3");
    check_field_offset(lv, s12300c1f4, 22, "S12300C1.s12300c1f4");
    check_field_offset(lv, s12300c1f5, 60, "S12300C1.s12300c1f5");
    check_field_offset(lv, s12300c1f6, 80, "S12300C1.s12300c1f6");
  }
}
static Arrange_To_Call_Me vS12300C1(Test_S12300C1, "S12300C1", 88);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12299C1  {
  int s12299c1f0;
  char s12299c1f1[4];
  long s12299c1f2;
  ::S8715C38 s12299c1f3;
  char s12299c1f4[38];
  int s12299c1f5[5];
  long s12299c1f6;
};
//SIG(1 S12299C1) C1{ Fi Fc[4] Fl FC2{ Fc[6]} Fc[38] Fi[5] Fl}



static void Test_S12299C1()
{
  {
    init_simple_test("S12299C1");
    S12299C1 lv;
    check2(sizeof(lv), ABISELECT(88,80), "sizeof(S12299C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12299C1)");
    check_field_offset(lv, s12299c1f0, 0, "S12299C1.s12299c1f0");
    check_field_offset(lv, s12299c1f1, 4, "S12299C1.s12299c1f1");
    check_field_offset(lv, s12299c1f2, 8, "S12299C1.s12299c1f2");
    check_field_offset(lv, s12299c1f3, ABISELECT(16,12), "S12299C1.s12299c1f3");
    check_field_offset(lv, s12299c1f4, ABISELECT(22,18), "S12299C1.s12299c1f4");
    check_field_offset(lv, s12299c1f5, ABISELECT(60,56), "S12299C1.s12299c1f5");
    check_field_offset(lv, s12299c1f6, ABISELECT(80,76), "S12299C1.s12299c1f6");
  }
}
static Arrange_To_Call_Me vS12299C1(Test_S12299C1, "S12299C1", ABISELECT(88,80));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15247C1  {
  char s15247c1f0[4];
  int s15247c1f1;
  ::S15054C11 s15247c1f2;
  char s15247c1f3;
  void  mf15247c1(); // _ZN8S15247C19mf15247c1Ev
};
//SIG(1 S15247C1) C1{ m Fc[4] Fi FC2{ m FC3{ m FC4{ FL}} FC3} Fc}


void  S15247C1 ::mf15247c1(){}

static void Test_S15247C1()
{
  {
    init_simple_test("S15247C1");
    S15247C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S15247C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15247C1)");
    check_field_offset(lv, s15247c1f0, 0, "S15247C1.s15247c1f0");
    check_field_offset(lv, s15247c1f1, 4, "S15247C1.s15247c1f1");
    check_field_offset(lv, s15247c1f2, 8, "S15247C1.s15247c1f2");
    check_field_offset(lv, s15247c1f3, 24, "S15247C1.s15247c1f3");
  }
}
static Arrange_To_Call_Me vS15247C1(Test_S15247C1, "S15247C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15246C1  {
  char s15246c1f0[4];
  int s15246c1f1;
  ::S15053C11 s15246c1f2;
  char s15246c1f3;
  void  mf15246c1(); // _ZN8S15246C19mf15246c1Ev
};
//SIG(1 S15246C1) C1{ m Fc[4] Fi FC2{ m FC3{ m FC4{ Fl}} FC3} Fc}


void  S15246C1 ::mf15246c1(){}

static void Test_S15246C1()
{
  {
    init_simple_test("S15246C1");
    S15246C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S15246C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15246C1)");
    check_field_offset(lv, s15246c1f0, 0, "S15246C1.s15246c1f0");
    check_field_offset(lv, s15246c1f1, 4, "S15246C1.s15246c1f1");
    check_field_offset(lv, s15246c1f2, 8, "S15246C1.s15246c1f2");
    check_field_offset(lv, s15246c1f3, ABISELECT(24,16), "S15246C1.s15246c1f3");
  }
}
static Arrange_To_Call_Me vS15246C1(Test_S15246C1, "S15246C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16591C1  {
  int s16591c1f0;
  char s16591c1f1[3];
  ::S15054C11 s16591c1f2;
  int s16591c1f3;
  void  mf16591c1(); // _ZN8S16591C19mf16591c1Ev
};
//SIG(1 S16591C1) C1{ m Fi Fc[3] FC2{ m FC3{ m FC4{ FL}} FC3} Fi}


void  S16591C1 ::mf16591c1(){}

static void Test_S16591C1()
{
  {
    init_simple_test("S16591C1");
    S16591C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S16591C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16591C1)");
    check_field_offset(lv, s16591c1f0, 0, "S16591C1.s16591c1f0");
    check_field_offset(lv, s16591c1f1, 4, "S16591C1.s16591c1f1");
    check_field_offset(lv, s16591c1f2, 8, "S16591C1.s16591c1f2");
    check_field_offset(lv, s16591c1f3, 24, "S16591C1.s16591c1f3");
  }
}
static Arrange_To_Call_Me vS16591C1(Test_S16591C1, "S16591C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16590C1  {
  int s16590c1f0;
  char s16590c1f1[3];
  ::S15053C11 s16590c1f2;
  int s16590c1f3;
  void  mf16590c1(); // _ZN8S16590C19mf16590c1Ev
};
//SIG(1 S16590C1) C1{ m Fi Fc[3] FC2{ m FC3{ m FC4{ Fl}} FC3} Fi}


void  S16590C1 ::mf16590c1(){}

static void Test_S16590C1()
{
  {
    init_simple_test("S16590C1");
    S16590C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S16590C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16590C1)");
    check_field_offset(lv, s16590c1f0, 0, "S16590C1.s16590c1f0");
    check_field_offset(lv, s16590c1f1, 4, "S16590C1.s16590c1f1");
    check_field_offset(lv, s16590c1f2, 8, "S16590C1.s16590c1f2");
    check_field_offset(lv, s16590c1f3, ABISELECT(24,16), "S16590C1.s16590c1f3");
  }
}
static Arrange_To_Call_Me vS16590C1(Test_S16590C1, "S16590C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13068C2  {
  ::S8715C38 s13068c2f0;
  char s13068c2f1[128];
  int s13068c2f2;
};
//SIG(1 S13068C2) C1{ FC2{ Fc[6]} Fc[128] Fi}



static void Test_S13068C2()
{
  {
    init_simple_test("S13068C2");
    S13068C2 lv;
    check2(sizeof(lv), 140, "sizeof(S13068C2)");
    check2(__alignof__(lv), 4, "__alignof__(S13068C2)");
    check_field_offset(lv, s13068c2f0, 0, "S13068C2.s13068c2f0");
    check_field_offset(lv, s13068c2f1, 6, "S13068C2.s13068c2f1");
    check_field_offset(lv, s13068c2f2, 136, "S13068C2.s13068c2f2");
  }
}
static Arrange_To_Call_Me vS13068C2(Test_S13068C2, "S13068C2", 140);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13068C1  {
  int s13068c1f0[2];
  ::S13068C2 s13068c1f1[17];
};
//SIG(1 S13068C1) C1{ Fi[2] FC2{ FC3{ Fc[6]} Fc[128] Fi}[17]}



static void Test_S13068C1()
{
  {
    init_simple_test("S13068C1");
    S13068C1 lv;
    check2(sizeof(lv), 2388, "sizeof(S13068C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13068C1)");
    check_field_offset(lv, s13068c1f0, 0, "S13068C1.s13068c1f0");
    check_field_offset(lv, s13068c1f1, 8, "S13068C1.s13068c1f1");
  }
}
static Arrange_To_Call_Me vS13068C1(Test_S13068C1, "S13068C1", 2388);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12265C1  {
  int s12265c1f0;
  char s12265c1f1[3];
  ::S15054C11 s12265c1f2;
};
//SIG(1 S12265C1) C1{ Fi Fc[3] FC2{ m FC3{ m FC4{ FL}} FC3}}



static void Test_S12265C1()
{
  {
    init_simple_test("S12265C1");
    S12265C1 lv;
    check2(sizeof(lv), 24, "sizeof(S12265C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12265C1)");
    check_field_offset(lv, s12265c1f0, 0, "S12265C1.s12265c1f0");
    check_field_offset(lv, s12265c1f1, 4, "S12265C1.s12265c1f1");
    check_field_offset(lv, s12265c1f2, 8, "S12265C1.s12265c1f2");
  }
}
static Arrange_To_Call_Me vS12265C1(Test_S12265C1, "S12265C1", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12264C1  {
  int s12264c1f0;
  char s12264c1f1[3];
  ::S15053C11 s12264c1f2;
};
//SIG(1 S12264C1) C1{ Fi Fc[3] FC2{ m FC3{ m FC4{ Fl}} FC3}}



static void Test_S12264C1()
{
  {
    init_simple_test("S12264C1");
    S12264C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S12264C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12264C1)");
    check_field_offset(lv, s12264c1f0, 0, "S12264C1.s12264c1f0");
    check_field_offset(lv, s12264c1f1, 4, "S12264C1.s12264c1f1");
    check_field_offset(lv, s12264c1f2, 8, "S12264C1.s12264c1f2");
  }
}
static Arrange_To_Call_Me vS12264C1(Test_S12264C1, "S12264C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18307C1  {
  void *s18307c1f0[3];
  int s18307c1f1;
  ::S3995C7_nt s18307c1f2;
  int s18307c1f3[2];
  void  mf18307c1(); // _ZN8S18307C19mf18307c1Ev
};
//SIG(1 S18307C1) C1{ m Fp[3] Fi FC2{ Fi[2] Fp Fi} Fi[2]}


void  S18307C1 ::mf18307c1(){}

static void Test_S18307C1()
{
  {
    init_simple_test("S18307C1");
    S18307C1 lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S18307C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18307C1)");
    check_field_offset(lv, s18307c1f0, 0, "S18307C1.s18307c1f0");
    check_field_offset(lv, s18307c1f1, ABISELECT(24,12), "S18307C1.s18307c1f1");
    check_field_offset(lv, s18307c1f2, ABISELECT(32,16), "S18307C1.s18307c1f2");
    check_field_offset(lv, s18307c1f3, ABISELECT(56,32), "S18307C1.s18307c1f3");
  }
}
static Arrange_To_Call_Me vS18307C1(Test_S18307C1, "S18307C1", ABISELECT(64,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14172C1  {
  void *s14172c1f0;
  int s14172c1f1;
  ::S8715C38 s14172c1f2;
  ::S8715C38 s14172c1f3;
  short s14172c1f4[2];
  int s14172c1f5[3];
};
//SIG(1 S14172C1) C1{ Fp Fi FC2{ Fc[6]} FC2 Fs[2] Fi[3]}



static void Test_S14172C1()
{
  {
    init_simple_test("S14172C1");
    S14172C1 lv;
    check2(sizeof(lv), ABISELECT(40,36), "sizeof(S14172C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14172C1)");
    check_field_offset(lv, s14172c1f0, 0, "S14172C1.s14172c1f0");
    check_field_offset(lv, s14172c1f1, ABISELECT(8,4), "S14172C1.s14172c1f1");
    check_field_offset(lv, s14172c1f2, ABISELECT(12,8), "S14172C1.s14172c1f2");
    check_field_offset(lv, s14172c1f3, ABISELECT(18,14), "S14172C1.s14172c1f3");
    check_field_offset(lv, s14172c1f4, ABISELECT(24,20), "S14172C1.s14172c1f4");
    check_field_offset(lv, s14172c1f5, ABISELECT(28,24), "S14172C1.s14172c1f5");
  }
}
static Arrange_To_Call_Me vS14172C1(Test_S14172C1, "S14172C1", ABISELECT(40,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13539C1  {
  int s13539c1f0[5];
  ::S8715C38 s13539c1f1;
  char s13539c1f2[16];
  int s13539c1f3;
  __tsi64 s13539c1f4[3];
};
//SIG(1 S13539C1) C1{ Fi[5] FC2{ Fc[6]} Fc[16] Fi FL[3]}



static void Test_S13539C1()
{
  {
    init_simple_test("S13539C1");
    S13539C1 lv;
    check2(sizeof(lv), 72, "sizeof(S13539C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13539C1)");
    check_field_offset(lv, s13539c1f0, 0, "S13539C1.s13539c1f0");
    check_field_offset(lv, s13539c1f1, 20, "S13539C1.s13539c1f1");
    check_field_offset(lv, s13539c1f2, 26, "S13539C1.s13539c1f2");
    check_field_offset(lv, s13539c1f3, 44, "S13539C1.s13539c1f3");
    check_field_offset(lv, s13539c1f4, 48, "S13539C1.s13539c1f4");
  }
}
static Arrange_To_Call_Me vS13539C1(Test_S13539C1, "S13539C1", 72);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11974C1  {
  ::S15054C12 s11974c1f0;
  ::S15054C12 s11974c1f1;
  ::S15054C12 s11974c1f2;
  ::S15054C12 s11974c1f3;
  int s11974c1f4[4];
};
//SIG(1 S11974C1) C1{ FC2{ m FC3{ FL}} FC2 FC2 FC2 Fi[4]}



static void Test_S11974C1()
{
  {
    init_simple_test("S11974C1");
    S11974C1 lv;
    check2(sizeof(lv), 48, "sizeof(S11974C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11974C1)");
    check_field_offset(lv, s11974c1f0, 0, "S11974C1.s11974c1f0");
    check_field_offset(lv, s11974c1f1, 8, "S11974C1.s11974c1f1");
    check_field_offset(lv, s11974c1f2, 16, "S11974C1.s11974c1f2");
    check_field_offset(lv, s11974c1f3, 24, "S11974C1.s11974c1f3");
    check_field_offset(lv, s11974c1f4, 32, "S11974C1.s11974c1f4");
  }
}
static Arrange_To_Call_Me vS11974C1(Test_S11974C1, "S11974C1", 48);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11973C1  {
  ::S15053C12 s11973c1f0;
  ::S15053C12 s11973c1f1;
  ::S15053C12 s11973c1f2;
  ::S15053C12 s11973c1f3;
  int s11973c1f4[4];
};
//SIG(1 S11973C1) C1{ FC2{ m FC3{ Fl}} FC2 FC2 FC2 Fi[4]}



static void Test_S11973C1()
{
  {
    init_simple_test("S11973C1");
    S11973C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S11973C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11973C1)");
    check_field_offset(lv, s11973c1f0, 0, "S11973C1.s11973c1f0");
    check_field_offset(lv, s11973c1f1, ABISELECT(8,4), "S11973C1.s11973c1f1");
    check_field_offset(lv, s11973c1f2, ABISELECT(16,8), "S11973C1.s11973c1f2");
    check_field_offset(lv, s11973c1f3, ABISELECT(24,12), "S11973C1.s11973c1f3");
    check_field_offset(lv, s11973c1f4, ABISELECT(32,16), "S11973C1.s11973c1f4");
  }
}
static Arrange_To_Call_Me vS11973C1(Test_S11973C1, "S11973C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11981C1  {
  ::S15054C11 s11981c1f0;
  char s11981c1f1[2];
};
//SIG(1 S11981C1) C1{ FC2{ m FC3{ m FC4{ FL}} FC3} Fc[2]}



static void Test_S11981C1()
{
  {
    init_simple_test("S11981C1");
    S11981C1 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S11981C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11981C1)");
    check_field_offset(lv, s11981c1f0, 0, "S11981C1.s11981c1f0");
    check_field_offset(lv, s11981c1f1, 16, "S11981C1.s11981c1f1");
  }
}
static Arrange_To_Call_Me vS11981C1(Test_S11981C1, "S11981C1", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11980C1  {
  ::S15053C11 s11980c1f0;
  char s11980c1f1[2];
};
//SIG(1 S11980C1) C1{ FC2{ m FC3{ m FC4{ Fl}} FC3} Fc[2]}



static void Test_S11980C1()
{
  {
    init_simple_test("S11980C1");
    S11980C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S11980C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11980C1)");
    check_field_offset(lv, s11980c1f0, 0, "S11980C1.s11980c1f0");
    check_field_offset(lv, s11980c1f1, ABISELECT(16,8), "S11980C1.s11980c1f1");
  }
}
static Arrange_To_Call_Me vS11980C1(Test_S11980C1, "S11980C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11649C2  {
  int s11649c2f0[5];
  char s11649c2f1[128];
};
//SIG(-1 S11649C2) C1{ Fi[5] Fc[128]}



static void Test_S11649C2()
{
  {
    init_simple_test("S11649C2");
    S11649C2 lv;
    check2(sizeof(lv), 148, "sizeof(S11649C2)");
    check2(__alignof__(lv), 4, "__alignof__(S11649C2)");
    check_field_offset(lv, s11649c2f0, 0, "S11649C2.s11649c2f0");
    check_field_offset(lv, s11649c2f1, 20, "S11649C2.s11649c2f1");
  }
}
static Arrange_To_Call_Me vS11649C2(Test_S11649C2, "S11649C2", 148);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11649C1  {
  ::S11649C2 s11649c1f0;
  ::S8715C38 s11649c1f1;
};
//SIG(1 S11649C1) C1{ FC2{ Fi[5] Fc[128]} FC3{ Fc[6]}}



static void Test_S11649C1()
{
  {
    init_simple_test("S11649C1");
    S11649C1 lv;
    check2(sizeof(lv), 156, "sizeof(S11649C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11649C1)");
    check_field_offset(lv, s11649c1f0, 0, "S11649C1.s11649c1f0");
    check_field_offset(lv, s11649c1f1, 148, "S11649C1.s11649c1f1");
  }
}
static Arrange_To_Call_Me vS11649C1(Test_S11649C1, "S11649C1", 156);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5839C4_nt  {
  int s5839c4f0;
  void  mf5839c4(); // _ZN10S5839C4_nt8mf5839c4Ev
};
//SIG(-1 S5839C4_nt) C1{ m Fi}


void  S5839C4_nt ::mf5839c4(){}

//skip512 S5839C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5839C1  : S16932C14 , S2651C3_nt {
  ::S5839C4_nt s5839c1f0;
};
//SIG(1 S5839C1) C1{ BC2{ m Fi} BC3{ m Fi} FC4{ m Fi}}



static void Test_S5839C1()
{
  extern Class_Descriptor cd_S5839C1;
  void *lvp;
  {
    int buf[4];
    init_test(&cd_S5839C1, buf);
    S5839C1 &lv = *(new (buf) S5839C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 12, "sizeof(S5839C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5839C1)");
    check_base_class_offset(lv, (S16932C14*), 0, "S5839C1");
    check_base_class_offset(lv, (S2651C3_nt*), 4, "S5839C1");
    check_field_offset(lv, s5839c1f0, 8, "S5839C1.s5839c1f0");
    test_class_info(&lv, &cd_S5839C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5839C1(Test_S5839C1, "S5839C1", 12);

#else // __cplusplus

extern Class_Descriptor cd_S16932C14;
extern Class_Descriptor cd_S2651C3_nt;
static Base_Class bases_S5839C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S16932C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2651C3_nt,    4, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S5839C1 = {  "S5839C1", // class name
  bases_S5839C1, 2,
  0, // no vftv
  0, //no vtt
  12, // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16035C1  {
  ::S664C12_nt s16035c1f0;
  ::S664C12_nt s16035c1f1;
  ::S8663C5_nt s16035c1f2;
  int s16035c1f3;
  void  mf16035c1(); // _ZN8S16035C19mf16035c1Ev
};
//SIG(1 S16035C1) C1{ m FC2{ m Fi[3]} FC2 FC3{ m} Fi}


void  S16035C1 ::mf16035c1(){}

static void Test_S16035C1()
{
  {
    init_simple_test("S16035C1");
    S16035C1 lv;
    check2(sizeof(lv), 32, "sizeof(S16035C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16035C1)");
    check_field_offset(lv, s16035c1f0, 0, "S16035C1.s16035c1f0");
    check_field_offset(lv, s16035c1f1, 12, "S16035C1.s16035c1f1");
    check_field_offset(lv, s16035c1f2, 24, "S16035C1.s16035c1f2");
    check_field_offset(lv, s16035c1f3, 28, "S16035C1.s16035c1f3");
  }
}
static Arrange_To_Call_Me vS16035C1(Test_S16035C1, "S16035C1", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18804C1  {
  __tsi64 s18804c1f0:42;
  virtual void  v1(); // _ZN8S18804C12v1Ev
  virtual void  v2(); // _ZN8S18804C12v2Ev
  virtual void  v3(); // _ZN8S18804C12v3Ev
  virtual void  v4(); // _ZN8S18804C12v4Ev
  virtual void  v5(); // _ZN8S18804C12v5Ev
  virtual void  v6(); // _ZN8S18804C12v6Ev
  virtual void  v7(); // _ZN8S18804C12v7Ev
  ~S18804C1(); // tgen
  S18804C1(); // tgen
};
//SIG(1 S18804C1) C1{ v1 v2 v3 v4 v5 v6 v7 FL:42}


void  S18804C1 ::v1(){vfunc_called(this, "_ZN8S18804C12v1Ev");}
void  S18804C1 ::v2(){vfunc_called(this, "_ZN8S18804C12v2Ev");}
void  S18804C1 ::v3(){vfunc_called(this, "_ZN8S18804C12v3Ev");}
void  S18804C1 ::v4(){vfunc_called(this, "_ZN8S18804C12v4Ev");}
void  S18804C1 ::v5(){vfunc_called(this, "_ZN8S18804C12v5Ev");}
void  S18804C1 ::v6(){vfunc_called(this, "_ZN8S18804C12v6Ev");}
void  S18804C1 ::v7(){vfunc_called(this, "_ZN8S18804C12v7Ev");}
S18804C1 ::~S18804C1(){ note_dtor("S18804C1", this);} // tgen
S18804C1 ::S18804C1(){ note_ctor("S18804C1", this);} // tgen

static void Test_S18804C1()
{
  extern Class_Descriptor cd_S18804C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S18804C1, buf);
    S18804C1 *dp, &lv = *(dp=new (buf) S18804C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S18804C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18804C1)");
    set_bf_and_test(lv, s18804c1f0, ABISELECT(8,4), 0, 42, 1, "S18804C1");
    set_bf_and_test(lv, s18804c1f0, ABISELECT(8,4), 0, 42, hide_sll(1LL<<41), "S18804C1");
    test_class_info(&lv, &cd_S18804C1);
    dp->~S18804C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18804C1(Test_S18804C1, "S18804C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S18804C1C1Ev();
extern void _ZN8S18804C1D1Ev();
Name_Map name_map_S18804C1[] = {
  NSPAIR(_ZN8S18804C1C1Ev),
  NSPAIR(_ZN8S18804C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18804C1[];
extern void _ZN8S18804C12v1Ev();
extern void _ZN8S18804C12v2Ev();
extern void _ZN8S18804C12v3Ev();
extern void _ZN8S18804C12v4Ev();
extern void _ZN8S18804C12v5Ev();
extern void _ZN8S18804C12v6Ev();
extern void _ZN8S18804C12v7Ev();
static  VTBL_ENTRY vtc_S18804C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18804C1[0]),
  (VTBL_ENTRY)&_ZN8S18804C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18804C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18804C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18804C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18804C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18804C12v6Ev,
  (VTBL_ENTRY)&_ZN8S18804C12v7Ev,
};
extern VTBL_ENTRY _ZTI8S18804C1[];
extern  VTBL_ENTRY _ZTV8S18804C1[];
Class_Descriptor cd_S18804C1 = {  "S18804C1", // class name
  0,0,//no base classes
  &(vtc_S18804C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S18804C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18804C1),9, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11976C1  {
  ::S15054C12 s11976c1f0;
  ::S15054C12 s11976c1f1;
  ::S15054C12 s11976c1f2;
  ::S15054C12 s11976c1f3;
};
//SIG(1 S11976C1) C1{ FC2{ m FC3{ FL}} FC2 FC2 FC2}



static void Test_S11976C1()
{
  {
    init_simple_test("S11976C1");
    S11976C1 lv;
    check2(sizeof(lv), 32, "sizeof(S11976C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11976C1)");
    check_field_offset(lv, s11976c1f0, 0, "S11976C1.s11976c1f0");
    check_field_offset(lv, s11976c1f1, 8, "S11976C1.s11976c1f1");
    check_field_offset(lv, s11976c1f2, 16, "S11976C1.s11976c1f2");
    check_field_offset(lv, s11976c1f3, 24, "S11976C1.s11976c1f3");
  }
}
static Arrange_To_Call_Me vS11976C1(Test_S11976C1, "S11976C1", 32);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11975C1  {
  ::S15053C12 s11975c1f0;
  ::S15053C12 s11975c1f1;
  ::S15053C12 s11975c1f2;
  ::S15053C12 s11975c1f3;
};
//SIG(1 S11975C1) C1{ FC2{ m FC3{ Fl}} FC2 FC2 FC2}



static void Test_S11975C1()
{
  {
    init_simple_test("S11975C1");
    S11975C1 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S11975C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11975C1)");
    check_field_offset(lv, s11975c1f0, 0, "S11975C1.s11975c1f0");
    check_field_offset(lv, s11975c1f1, ABISELECT(8,4), "S11975C1.s11975c1f1");
    check_field_offset(lv, s11975c1f2, ABISELECT(16,8), "S11975C1.s11975c1f2");
    check_field_offset(lv, s11975c1f3, ABISELECT(24,12), "S11975C1.s11975c1f3");
  }
}
static Arrange_To_Call_Me vS11975C1(Test_S11975C1, "S11975C1", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9533C2  {
  virtual  ~S9533C2(); // _ZN7S9533C2D1Ev
  virtual void  v3(); // _ZN7S9533C22v3Ev
  virtual void  v4(); // _ZN7S9533C22v4Ev
  S9533C2(); // tgen
};
//SIG(-1 S9533C2) C1{ vd v1 v2}


 S9533C2 ::~S9533C2(){ note_dtor("S9533C2", this);}
void  S9533C2 ::v3(){vfunc_called(this, "_ZN7S9533C22v3Ev");}
void  S9533C2 ::v4(){vfunc_called(this, "_ZN7S9533C22v4Ev");}
S9533C2 ::S9533C2(){ note_ctor("S9533C2", this);} // tgen

static void Test_S9533C2()
{
  extern Class_Descriptor cd_S9533C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S9533C2, buf);
    S9533C2 *dp, &lv = *(dp=new (buf) S9533C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S9533C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9533C2)");
    test_class_info(&lv, &cd_S9533C2);
    dp->~S9533C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9533C2(Test_S9533C2, "S9533C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S9533C2C1Ev();
extern void _ZN7S9533C2D1Ev();
Name_Map name_map_S9533C2[] = {
  NSPAIR(_ZN7S9533C2C1Ev),
  NSPAIR(_ZN7S9533C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9533C2[];
extern void _ZN7S9533C2D1Ev();
extern void _ZN7S9533C2D0Ev();
extern void _ZN7S9533C22v3Ev();
extern void _ZN7S9533C22v4Ev();
static  VTBL_ENTRY vtc_S9533C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9533C2[0]),
  (VTBL_ENTRY)&_ZN7S9533C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9533C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9533C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9533C22v4Ev,
};
extern VTBL_ENTRY _ZTI7S9533C2[];
extern  VTBL_ENTRY _ZTV7S9533C2[];
Class_Descriptor cd_S9533C2 = {  "S9533C2", // class name
  0,0,//no base classes
  &(vtc_S9533C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S9533C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9533C2),6, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S9533C1  : S9533C2 {
  char s9533c1f0[3];
  virtual void  v1(); // _ZN7S9533C12v1Ev
  virtual void  v2(); // _ZN7S9533C12v2Ev
  ~S9533C1(); // tgen
  S9533C1(); // tgen
};
//SIG(1 S9533C1) C1{ BC2{ vd v3 v4} v1 v2 Fc[3]}


void  S9533C1 ::v1(){vfunc_called(this, "_ZN7S9533C12v1Ev");}
void  S9533C1 ::v2(){vfunc_called(this, "_ZN7S9533C12v2Ev");}
S9533C1 ::~S9533C1(){ note_dtor("S9533C1", this);} // tgen
S9533C1 ::S9533C1(){ note_ctor("S9533C1", this);} // tgen

static void Test_S9533C1()
{
  extern Class_Descriptor cd_S9533C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S9533C1, buf);
    S9533C1 *dp, &lv = *(dp=new (buf) S9533C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S9533C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9533C1)");
    check_base_class_offset(lv, (S9533C2*), 0, "S9533C1");
    check_field_offset(lv, s9533c1f0, ABISELECT(8,4), "S9533C1.s9533c1f0");
    test_class_info(&lv, &cd_S9533C1);
    dp->~S9533C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9533C1(Test_S9533C1, "S9533C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S9533C1C1Ev();
extern void _ZN7S9533C1D1Ev();
Name_Map name_map_S9533C1[] = {
  NSPAIR(_ZN7S9533C1C1Ev),
  NSPAIR(_ZN7S9533C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9533C2;
extern VTBL_ENTRY _ZTI7S9533C2[];
extern  VTBL_ENTRY _ZTV7S9533C2[];
static Base_Class bases_S9533C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9533C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S9533C1[];
extern void _ZN7S9533C1D1Ev();
extern void _ZN7S9533C1D0Ev();
extern void _ZN7S9533C22v3Ev();
extern void _ZN7S9533C22v4Ev();
extern void _ZN7S9533C12v1Ev();
extern void _ZN7S9533C12v2Ev();
static  VTBL_ENTRY vtc_S9533C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9533C1[0]),
  (VTBL_ENTRY)&_ZN7S9533C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9533C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9533C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9533C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9533C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9533C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9533C1[];
extern  VTBL_ENTRY _ZTV7S9533C1[];
Class_Descriptor cd_S9533C1 = {  "S9533C1", // class name
  bases_S9533C1, 1,
  &(vtc_S9533C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S9533C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9533C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19749C2  {
  __tsi64 s19749c2f0[9];
  void  mf19749c2(); // _ZN8S19749C29mf19749c2Ev
};
//SIG(-1 S19749C2) C1{ m FL[9]}


void  S19749C2 ::mf19749c2(){}

static void Test_S19749C2()
{
  {
    init_simple_test("S19749C2");
    S19749C2 lv;
    check2(sizeof(lv), 72, "sizeof(S19749C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19749C2)");
    check_field_offset(lv, s19749c2f0, 0, "S19749C2.s19749c2f0");
  }
}
static Arrange_To_Call_Me vS19749C2(Test_S19749C2, "S19749C2", 72);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19749C2[];
VTBL_ENTRY *P__ZTI8S19749C2 = _ZTI8S19749C2; 
Class_Descriptor cd_S19749C2 = {  "S19749C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  72, // object size
  NSPAIRA(_ZTI8S19749C2),ABISELECT(16,8), //typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19749C1  : virtual S19749C2 {
  long double s19749c1f0;
  virtual  ~S19749C1(); // _ZN8S19749C1D2Ev
  virtual void  v1(); // _ZN8S19749C12v1Ev
  virtual void  v2(); // _ZN8S19749C12v2Ev
  S19749C1(); // tgen
};
//SIG(1 S19749C1) C1{ VBC2{ m FL[9]} vd v1 v2 FD}


 S19749C1 ::~S19749C1(){ note_dtor("S19749C1", this);}
void  S19749C1 ::v1(){vfunc_called(this, "_ZN8S19749C12v1Ev");}
void  S19749C1 ::v2(){vfunc_called(this, "_ZN8S19749C12v2Ev");}
S19749C1 ::S19749C1(){ note_ctor("S19749C1", this);} // tgen

static void Test_S19749C1()
{
  extern Class_Descriptor cd_S19749C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(8,23)];
    init_test(&cd_S19749C1, buf);
    S19749C1 *dp, &lv = *(dp=new (buf) S19749C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S19749C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19749C1)");
    check_base_class_offset(lv, (S19749C2*), ABISELECT(32,16), "S19749C1");
    check_field_offset(lv, s19749c1f0, ABISELECT(16,4), "S19749C1.s19749c1f0");
    test_class_info(&lv, &cd_S19749C1);
    dp->~S19749C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19749C1(Test_S19749C1, "S19749C1", ABISELECT(112,88));

#else // __cplusplus

extern void _ZN8S19749C1C1Ev();
extern void _ZN8S19749C1D2Ev();
Name_Map name_map_S19749C1[] = {
  NSPAIR(_ZN8S19749C1C1Ev),
  NSPAIR(_ZN8S19749C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19749C2;
extern VTBL_ENTRY _ZTI8S19749C2[];
static Base_Class bases_S19749C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19749C2,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19749C1[];
extern void _ZN8S19749C1D1Ev();
extern void _ZN8S19749C1D0Ev();
extern void _ZN8S19749C12v1Ev();
extern void _ZN8S19749C12v2Ev();
static  VTBL_ENTRY vtc_S19749C1[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19749C1[0]),
  (VTBL_ENTRY)&_ZN8S19749C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19749C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19749C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19749C12v2Ev,
};
extern VTBL_ENTRY _ZTV8S19749C1[];
static  VTT_ENTRY vtt_S19749C1[] = {
  {&(_ZTV8S19749C1[3]),  3,7},
};
extern VTBL_ENTRY _ZTI8S19749C1[];
extern  VTBL_ENTRY _ZTV8S19749C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19749C1[];
Class_Descriptor cd_S19749C1 = {  "S19749C1", // class name
  bases_S19749C1, 1,
  &(vtc_S19749C1[0]), // expected_vtbl_contents
  &(vtt_S19749C1[0]), // expected_vtt_contents
  ABISELECT(112,88), // object size
  NSPAIRA(_ZTI8S19749C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19749C1),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19749C1),1, //virtual table table var
  0, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S8261C1  : S4055C3_nt {
  char s8261c1f0;
  int s8261c1f1;
  char s8261c1f2[2];
  short s8261c1f3;
  ~S8261C1(); // tgen
  S8261C1(); // tgen
};
//SIG(1 S8261C1) C1{ BC2{ vd m} Fc Fi Fc[2] Fs}


S8261C1 ::~S8261C1(){ note_dtor("S8261C1", this);} // tgen
S8261C1 ::S8261C1(){ note_ctor("S8261C1", this);} // tgen

static void Test_S8261C1()
{
  extern Class_Descriptor cd_S8261C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S8261C1, buf);
    S8261C1 *dp, &lv = *(dp=new (buf) S8261C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S8261C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8261C1)");
    check_base_class_offset(lv, (S4055C3_nt*), 0, "S8261C1");
    check_field_offset(lv, s8261c1f0, ABISELECT(8,4), "S8261C1.s8261c1f0");
    check_field_offset(lv, s8261c1f1, ABISELECT(12,8), "S8261C1.s8261c1f1");
    check_field_offset(lv, s8261c1f2, ABISELECT(16,12), "S8261C1.s8261c1f2");
    check_field_offset(lv, s8261c1f3, ABISELECT(18,14), "S8261C1.s8261c1f3");
    test_class_info(&lv, &cd_S8261C1);
    dp->~S8261C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8261C1(Test_S8261C1, "S8261C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S8261C1C1Ev();
extern void _ZN7S8261C1D1Ev();
Name_Map name_map_S8261C1[] = {
  NSPAIR(_ZN7S8261C1C1Ev),
  NSPAIR(_ZN7S8261C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4055C3_nt;
extern VTBL_ENTRY _ZTI10S4055C3_nt[];
extern  VTBL_ENTRY _ZTV10S4055C3_nt[];
static Base_Class bases_S8261C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4055C3_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S8261C1[];
extern void _ZN7S8261C1D1Ev();
extern void _ZN7S8261C1D0Ev();
static  VTBL_ENTRY vtc_S8261C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8261C1[0]),
  (VTBL_ENTRY)&_ZN7S8261C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8261C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8261C1[];
extern  VTBL_ENTRY _ZTV7S8261C1[];
Class_Descriptor cd_S8261C1 = {  "S8261C1", // class name
  bases_S8261C1, 1,
  &(vtc_S8261C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S8261C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8261C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  1, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16101C1  {
  ::S16932C14 s16101c1f0;
  ::S5839C4_nt s16101c1f1;
  ::S16932C14 s16101c1f2;
  void  mf16101c1(); // _ZN8S16101C19mf16101c1Ev
};
//SIG(1 S16101C1) C1{ m FC2{ m Fi} FC3{ m Fi} FC2}


void  S16101C1 ::mf16101c1(){}

static void Test_S16101C1()
{
  {
    init_simple_test("S16101C1");
    S16101C1 lv;
    check2(sizeof(lv), 12, "sizeof(S16101C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16101C1)");
    check_field_offset(lv, s16101c1f0, 0, "S16101C1.s16101c1f0");
    check_field_offset(lv, s16101c1f1, 4, "S16101C1.s16101c1f1");
    check_field_offset(lv, s16101c1f2, 8, "S16101C1.s16101c1f2");
  }
}
static Arrange_To_Call_Me vS16101C1(Test_S16101C1, "S16101C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18771C1  {
  __tsi64 s18771c1f0:50;
  virtual void  v1(); // _ZN8S18771C12v1Ev
  virtual void  v2(); // _ZN8S18771C12v2Ev
  virtual void  v3(); // _ZN8S18771C12v3Ev
  virtual void  v4(); // _ZN8S18771C12v4Ev
  virtual void  v5(); // _ZN8S18771C12v5Ev
  virtual void  v6(); // _ZN8S18771C12v6Ev
  ~S18771C1(); // tgen
  S18771C1(); // tgen
};
//SIG(1 S18771C1) C1{ v1 v2 v3 v4 v5 v6 FL:50}


void  S18771C1 ::v1(){vfunc_called(this, "_ZN8S18771C12v1Ev");}
void  S18771C1 ::v2(){vfunc_called(this, "_ZN8S18771C12v2Ev");}
void  S18771C1 ::v3(){vfunc_called(this, "_ZN8S18771C12v3Ev");}
void  S18771C1 ::v4(){vfunc_called(this, "_ZN8S18771C12v4Ev");}
void  S18771C1 ::v5(){vfunc_called(this, "_ZN8S18771C12v5Ev");}
void  S18771C1 ::v6(){vfunc_called(this, "_ZN8S18771C12v6Ev");}
S18771C1 ::~S18771C1(){ note_dtor("S18771C1", this);} // tgen
S18771C1 ::S18771C1(){ note_ctor("S18771C1", this);} // tgen

static void Test_S18771C1()
{
  extern Class_Descriptor cd_S18771C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S18771C1, buf);
    S18771C1 *dp, &lv = *(dp=new (buf) S18771C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S18771C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18771C1)");
    set_bf_and_test(lv, s18771c1f0, ABISELECT(8,4), 0, 50, 1, "S18771C1");
    set_bf_and_test(lv, s18771c1f0, ABISELECT(8,4), 0, 50, hide_sll(1LL<<49), "S18771C1");
    test_class_info(&lv, &cd_S18771C1);
    dp->~S18771C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18771C1(Test_S18771C1, "S18771C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S18771C1C1Ev();
extern void _ZN8S18771C1D1Ev();
Name_Map name_map_S18771C1[] = {
  NSPAIR(_ZN8S18771C1C1Ev),
  NSPAIR(_ZN8S18771C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18771C1[];
extern void _ZN8S18771C12v1Ev();
extern void _ZN8S18771C12v2Ev();
extern void _ZN8S18771C12v3Ev();
extern void _ZN8S18771C12v4Ev();
extern void _ZN8S18771C12v5Ev();
extern void _ZN8S18771C12v6Ev();
static  VTBL_ENTRY vtc_S18771C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18771C1[0]),
  (VTBL_ENTRY)&_ZN8S18771C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18771C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18771C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18771C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18771C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18771C12v6Ev,
};
extern VTBL_ENTRY _ZTI8S18771C1[];
extern  VTBL_ENTRY _ZTV8S18771C1[];
Class_Descriptor cd_S18771C1 = {  "S18771C1", // class name
  0,0,//no base classes
  &(vtc_S18771C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S18771C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18771C1),8, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11675C1  {
  ::S14975C17_nt s11675c1f0;
  ::S8715C38 s11675c1f1;
  char s11675c1f2[2];
};
//SIG(1 S11675C1) C1{ FC2{ Fi} FC3{ Fc[6]} Fc[2]}



static void Test_S11675C1()
{
  {
    init_simple_test("S11675C1");
    S11675C1 lv;
    check2(sizeof(lv), 12, "sizeof(S11675C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11675C1)");
    check_field_offset(lv, s11675c1f0, 0, "S11675C1.s11675c1f0");
    check_field_offset(lv, s11675c1f1, 4, "S11675C1.s11675c1f1");
    check_field_offset(lv, s11675c1f2, 10, "S11675C1.s11675c1f2");
  }
}
static Arrange_To_Call_Me vS11675C1(Test_S11675C1, "S11675C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14173C1  {
  void *s14173c1f0;
  int s14173c1f1;
  ::S8715C38 s14173c1f2;
  short s14173c1f3;
  int s14173c1f4;
};
//SIG(1 S14173C1) C1{ Fp Fi FC2{ Fc[6]} Fs Fi}



static void Test_S14173C1()
{
  {
    init_simple_test("S14173C1");
    S14173C1 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S14173C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14173C1)");
    check_field_offset(lv, s14173c1f0, 0, "S14173C1.s14173c1f0");
    check_field_offset(lv, s14173c1f1, ABISELECT(8,4), "S14173C1.s14173c1f1");
    check_field_offset(lv, s14173c1f2, ABISELECT(12,8), "S14173C1.s14173c1f2");
    check_field_offset(lv, s14173c1f3, ABISELECT(18,14), "S14173C1.s14173c1f3");
    check_field_offset(lv, s14173c1f4, ABISELECT(20,16), "S14173C1.s14173c1f4");
  }
}
static Arrange_To_Call_Me vS14173C1(Test_S14173C1, "S14173C1", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16853C1  {
  int s16853c1f0;
  long s16853c1f1;
  char s16853c1f2[105];
  int s16853c1f3[3];
  void  mf16853c1(); // _ZN8S16853C19mf16853c1Ev
};
//SIG(1 S16853C1) C1{ m Fi Fl Fc[105] Fi[3]}


void  S16853C1 ::mf16853c1(){}

static void Test_S16853C1()
{
  {
    init_simple_test("S16853C1");
    S16853C1 lv;
    check2(sizeof(lv), ABISELECT(136,128), "sizeof(S16853C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16853C1)");
    check_field_offset(lv, s16853c1f0, 0, "S16853C1.s16853c1f0");
    check_field_offset(lv, s16853c1f1, ABISELECT(8,4), "S16853C1.s16853c1f1");
    check_field_offset(lv, s16853c1f2, ABISELECT(16,8), "S16853C1.s16853c1f2");
    check_field_offset(lv, s16853c1f3, ABISELECT(124,116), "S16853C1.s16853c1f3");
  }
}
static Arrange_To_Call_Me vS16853C1(Test_S16853C1, "S16853C1", ABISELECT(136,128));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21584C1  {
  int s21584c1f0;
  ::S15054C8 s21584c1f1;
  void  mf21584c1(); // _ZN8S21584C19mf21584c1Ev
  virtual  ~S21584C1(); // _ZN8S21584C1D1Ev
  S21584C1(); // tgen
};
//SIG(1 S21584C1) C1{ vd m Fi FC2{ m Fc[20]}}


void  S21584C1 ::mf21584c1(){}
 S21584C1 ::~S21584C1(){ note_dtor("S21584C1", this);}
S21584C1 ::S21584C1(){ note_ctor("S21584C1", this);} // tgen

static void Test_S21584C1()
{
  extern Class_Descriptor cd_S21584C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S21584C1, buf);
    S21584C1 *dp, &lv = *(dp=new (buf) S21584C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S21584C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21584C1)");
    check_field_offset(lv, s21584c1f0, ABISELECT(8,4), "S21584C1.s21584c1f0");
    check_field_offset(lv, s21584c1f1, ABISELECT(12,8), "S21584C1.s21584c1f1");
    test_class_info(&lv, &cd_S21584C1);
    dp->~S21584C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21584C1(Test_S21584C1, "S21584C1", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN8S21584C1C1Ev();
extern void _ZN8S21584C1D1Ev();
Name_Map name_map_S21584C1[] = {
  NSPAIR(_ZN8S21584C1C1Ev),
  NSPAIR(_ZN8S21584C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21584C1[];
extern void _ZN8S21584C1D1Ev();
extern void _ZN8S21584C1D0Ev();
static  VTBL_ENTRY vtc_S21584C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21584C1[0]),
  (VTBL_ENTRY)&_ZN8S21584C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21584C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21584C1[];
extern  VTBL_ENTRY _ZTV8S21584C1[];
Class_Descriptor cd_S21584C1 = {  "S21584C1", // class name
  0,0,//no base classes
  &(vtc_S21584C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI8S21584C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21584C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21238C1  {
  char s21238c1f0;
  ::S8243C8 s21238c1f1;
  void  mf21238c1(); // _ZN8S21238C19mf21238c1Ev
  virtual  ~S21238C1(); // _ZN8S21238C1D1Ev
  S21238C1(); // tgen
};
//SIG(1 S21238C1) C1{ vd m Fc FC2{ Fi[244]}}


void  S21238C1 ::mf21238c1(){}
 S21238C1 ::~S21238C1(){ note_dtor("S21238C1", this);}
S21238C1 ::S21238C1(){ note_ctor("S21238C1", this);} // tgen

static void Test_S21238C1()
{
  extern Class_Descriptor cd_S21238C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(125,247)];
    init_test(&cd_S21238C1, buf);
    S21238C1 *dp, &lv = *(dp=new (buf) S21238C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(992,984), "sizeof(S21238C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21238C1)");
    check_field_offset(lv, s21238c1f0, ABISELECT(8,4), "S21238C1.s21238c1f0");
    check_field_offset(lv, s21238c1f1, ABISELECT(12,8), "S21238C1.s21238c1f1");
    test_class_info(&lv, &cd_S21238C1);
    dp->~S21238C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21238C1(Test_S21238C1, "S21238C1", ABISELECT(992,984));

#else // __cplusplus

extern void _ZN8S21238C1C1Ev();
extern void _ZN8S21238C1D1Ev();
Name_Map name_map_S21238C1[] = {
  NSPAIR(_ZN8S21238C1C1Ev),
  NSPAIR(_ZN8S21238C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21238C1[];
extern void _ZN8S21238C1D1Ev();
extern void _ZN8S21238C1D0Ev();
static  VTBL_ENTRY vtc_S21238C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21238C1[0]),
  (VTBL_ENTRY)&_ZN8S21238C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21238C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21238C1[];
extern  VTBL_ENTRY _ZTV8S21238C1[];
Class_Descriptor cd_S21238C1 = {  "S21238C1", // class name
  0,0,//no base classes
  &(vtc_S21238C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(992,984), // object size
  NSPAIRA(_ZTI8S21238C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21238C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18002C1  {
  void *s18002c1f0[2];
  ::S8663C10_nt s18002c1f1;
  void  mf18002c1(); // _ZN8S18002C19mf18002c1Ev
};
//SIG(1 S18002C1) C1{ m Fp[2] FC2{ m Fi[4]}}


void  S18002C1 ::mf18002c1(){}

static void Test_S18002C1()
{
  {
    init_simple_test("S18002C1");
    S18002C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S18002C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18002C1)");
    check_field_offset(lv, s18002c1f0, 0, "S18002C1.s18002c1f0");
    check_field_offset(lv, s18002c1f1, ABISELECT(16,8), "S18002C1.s18002c1f1");
  }
}
static Arrange_To_Call_Me vS18002C1(Test_S18002C1, "S18002C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18604C1  {
  char s18604c1f0;
  long double s18604c1f1;
  char  :0;
  virtual void  v1(); // _ZN8S18604C12v1Ev
  virtual void  v2(); // _ZN8S18604C12v2Ev
  virtual void  v3(); // _ZN8S18604C12v3Ev
  ~S18604C1(); // tgen
  S18604C1(); // tgen
};
//SIG(1 S18604C1) C1{ v1 v2 v3 Fc FD Fc:0}


void  S18604C1 ::v1(){vfunc_called(this, "_ZN8S18604C12v1Ev");}
void  S18604C1 ::v2(){vfunc_called(this, "_ZN8S18604C12v2Ev");}
void  S18604C1 ::v3(){vfunc_called(this, "_ZN8S18604C12v3Ev");}
S18604C1 ::~S18604C1(){ note_dtor("S18604C1", this);} // tgen
S18604C1 ::S18604C1(){ note_ctor("S18604C1", this);} // tgen

static void Test_S18604C1()
{
  extern Class_Descriptor cd_S18604C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3,6)];
    init_test(&cd_S18604C1, buf);
    S18604C1 *dp, &lv = *(dp=new (buf) S18604C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S18604C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18604C1)");
    check_field_offset(lv, s18604c1f0, ABISELECT(8,4), "S18604C1.s18604c1f0");
    check_field_offset(lv, s18604c1f1, ABISELECT(16,8), "S18604C1.s18604c1f1");
    test_class_info(&lv, &cd_S18604C1);
    dp->~S18604C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18604C1(Test_S18604C1, "S18604C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S18604C1C1Ev();
extern void _ZN8S18604C1D1Ev();
Name_Map name_map_S18604C1[] = {
  NSPAIR(_ZN8S18604C1C1Ev),
  NSPAIR(_ZN8S18604C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18604C1[];
extern void _ZN8S18604C12v1Ev();
extern void _ZN8S18604C12v2Ev();
extern void _ZN8S18604C12v3Ev();
static  VTBL_ENTRY vtc_S18604C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18604C1[0]),
  (VTBL_ENTRY)&_ZN8S18604C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18604C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18604C12v3Ev,
};
extern VTBL_ENTRY _ZTI8S18604C1[];
extern  VTBL_ENTRY _ZTV8S18604C1[];
Class_Descriptor cd_S18604C1 = {  "S18604C1", // class name
  0,0,//no base classes
  &(vtc_S18604C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S18604C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18604C1),5, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11004C1  {
  char s11004c1f0[72];
  int s11004c1f1[7];
  char s11004c1f2[12];
};
//SIG(1 S11004C1) C1{ Fc[72] Fi[7] Fc[12]}



static void Test_S11004C1()
{
  {
    init_simple_test("S11004C1");
    S11004C1 lv;
    check2(sizeof(lv), 112, "sizeof(S11004C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11004C1)");
    check_field_offset(lv, s11004c1f0, 0, "S11004C1.s11004c1f0");
    check_field_offset(lv, s11004c1f1, 72, "S11004C1.s11004c1f1");
    check_field_offset(lv, s11004c1f2, 100, "S11004C1.s11004c1f2");
  }
}
static Arrange_To_Call_Me vS11004C1(Test_S11004C1, "S11004C1", 112);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10907C1  {
  char s10907c1f0[4];
  int s10907c1f1[2];
  char s10907c1f2[64];
};
//SIG(1 S10907C1) C1{ Fc[4] Fi[2] Fc[64]}



static void Test_S10907C1()
{
  {
    init_simple_test("S10907C1");
    S10907C1 lv;
    check2(sizeof(lv), 76, "sizeof(S10907C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10907C1)");
    check_field_offset(lv, s10907c1f0, 0, "S10907C1.s10907c1f0");
    check_field_offset(lv, s10907c1f1, 4, "S10907C1.s10907c1f1");
    check_field_offset(lv, s10907c1f2, 12, "S10907C1.s10907c1f2");
  }
}
static Arrange_To_Call_Me vS10907C1(Test_S10907C1, "S10907C1", 76);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11873C2_nt  {
  void *s11873c2f0[2];
};
//SIG(-1 S11873C2_nt) C1{ Fp[2]}



//skip512 S11873C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11873C1  {
  ::S11873C2_nt s11873c1f0;
  int s11873c1f1;
  void *s11873c1f2[4];
};
//SIG(1 S11873C1) C1{ FC2{ Fp[2]} Fi Fp[4]}



static void Test_S11873C1()
{
  {
    init_simple_test("S11873C1");
    S11873C1 lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S11873C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11873C1)");
    check_field_offset(lv, s11873c1f0, 0, "S11873C1.s11873c1f0");
    check_field_offset(lv, s11873c1f1, ABISELECT(16,8), "S11873C1.s11873c1f1");
    check_field_offset(lv, s11873c1f2, ABISELECT(24,12), "S11873C1.s11873c1f2");
  }
}
static Arrange_To_Call_Me vS11873C1(Test_S11873C1, "S11873C1", ABISELECT(56,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14234C1  {
  void *s14234c1f0;
  int s14234c1f1;
  void *s14234c1f2;
  int s14234c1f3[6];
  void *s14234c1f4;
};
//SIG(1 S14234C1) C1{ Fp Fi Fp Fi[6] Fp}



static void Test_S14234C1()
{
  {
    init_simple_test("S14234C1");
    S14234C1 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S14234C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14234C1)");
    check_field_offset(lv, s14234c1f0, 0, "S14234C1.s14234c1f0");
    check_field_offset(lv, s14234c1f1, ABISELECT(8,4), "S14234C1.s14234c1f1");
    check_field_offset(lv, s14234c1f2, ABISELECT(16,8), "S14234C1.s14234c1f2");
    check_field_offset(lv, s14234c1f3, ABISELECT(24,12), "S14234C1.s14234c1f3");
    check_field_offset(lv, s14234c1f4, ABISELECT(48,36), "S14234C1.s14234c1f4");
  }
}
static Arrange_To_Call_Me vS14234C1(Test_S14234C1, "S14234C1", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14389C1  {
  void *s14389c1f0;
  __tsi64 s14389c1f1;
  void *s14389c1f2[4];
  int s14389c1f3[2];
};
//SIG(1 S14389C1) C1{ Fp FL Fp[4] Fi[2]}



static void Test_S14389C1()
{
  {
    init_simple_test("S14389C1");
    S14389C1 lv;
    check2(sizeof(lv), ABISELECT(56,36), "sizeof(S14389C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14389C1)");
    check_field_offset(lv, s14389c1f0, 0, "S14389C1.s14389c1f0");
    check_field_offset(lv, s14389c1f1, ABISELECT(8,4), "S14389C1.s14389c1f1");
    check_field_offset(lv, s14389c1f2, ABISELECT(16,12), "S14389C1.s14389c1f2");
    check_field_offset(lv, s14389c1f3, ABISELECT(48,28), "S14389C1.s14389c1f3");
  }
}
static Arrange_To_Call_Me vS14389C1(Test_S14389C1, "S14389C1", ABISELECT(56,36));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12788C1  {
  int s12788c1f0;
  void *s12788c1f1[4];
  int s12788c1f2;
  void *s12788c1f3[2];
};
//SIG(1 S12788C1) C1{ Fi Fp[4] Fi Fp[2]}



static void Test_S12788C1()
{
  {
    init_simple_test("S12788C1");
    S12788C1 lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S12788C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12788C1)");
    check_field_offset(lv, s12788c1f0, 0, "S12788C1.s12788c1f0");
    check_field_offset(lv, s12788c1f1, ABISELECT(8,4), "S12788C1.s12788c1f1");
    check_field_offset(lv, s12788c1f2, ABISELECT(40,20), "S12788C1.s12788c1f2");
    check_field_offset(lv, s12788c1f3, ABISELECT(48,24), "S12788C1.s12788c1f3");
  }
}
static Arrange_To_Call_Me vS12788C1(Test_S12788C1, "S12788C1", ABISELECT(64,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17117C1  {
  int s17117c1f0[2];
  __tsi64 s17117c1f1;
  int s17117c1f2[3];
  void  mf17117c1(); // _ZN8S17117C19mf17117c1Ev
};
//SIG(1 S17117C1) C1{ m Fi[2] FL Fi[3]}


void  S17117C1 ::mf17117c1(){}

static void Test_S17117C1()
{
  {
    init_simple_test("S17117C1");
    S17117C1 lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S17117C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17117C1)");
    check_field_offset(lv, s17117c1f0, 0, "S17117C1.s17117c1f0");
    check_field_offset(lv, s17117c1f1, 8, "S17117C1.s17117c1f1");
    check_field_offset(lv, s17117c1f2, 16, "S17117C1.s17117c1f2");
  }
}
static Arrange_To_Call_Me vS17117C1(Test_S17117C1, "S17117C1", ABISELECT(32,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12368C1  {
  int s12368c1f0;
  ::S8715C38 s12368c1f1[8];
};
//SIG(1 S12368C1) C1{ Fi FC2{ Fc[6]}[8]}



static void Test_S12368C1()
{
  {
    init_simple_test("S12368C1");
    S12368C1 lv;
    check2(sizeof(lv), 52, "sizeof(S12368C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12368C1)");
    check_field_offset(lv, s12368c1f0, 0, "S12368C1.s12368c1f0");
    check_field_offset(lv, s12368c1f1, 4, "S12368C1.s12368c1f1");
  }
}
static Arrange_To_Call_Me vS12368C1(Test_S12368C1, "S12368C1", 52);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2802C2  : S7924C15_nt {
  int s2802c2f0;
};
//SIG(-1 S2802C2) C1{ BC2{ m Fp} Fi}



static void Test_S2802C2()
{
  extern Class_Descriptor cd_S2802C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2802C2, buf);
    S2802C2 &lv = *(new (buf) S2802C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2802C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2802C2)");
    check_base_class_offset(lv, (S7924C15_nt*), 0, "S2802C2");
    check_field_offset(lv, s2802c2f0, ABISELECT(8,4), "S2802C2.s2802c2f0");
    test_class_info(&lv, &cd_S2802C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2802C2(Test_S2802C2, "S2802C2", ABISELECT(16,8));

#else // __cplusplus

extern Class_Descriptor cd_S7924C15_nt;
static Base_Class bases_S2802C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7924C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2802C2 = {  "S2802C2", // class name
  bases_S2802C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S2802C1  : S2802C2 {
};
//SIG(1 S2802C1) C1{ BC2{ BC3{ m Fp} Fi}}



static void Test_S2802C1()
{
  extern Class_Descriptor cd_S2802C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S2802C1, buf);
    S2802C1 &lv = *(new (buf) S2802C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S2802C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2802C1)");
    check_base_class_offset(lv, (S7924C15_nt*)(S2802C2*), 0, "S2802C1");
    check_base_class_offset(lv, (S2802C2*), 0, "S2802C1");
    test_class_info(&lv, &cd_S2802C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2802C1(Test_S2802C1, "S2802C1", ABISELECT(16,8));

#else // __cplusplus

extern Class_Descriptor cd_S7924C15_nt;
extern Class_Descriptor cd_S2802C2;
static Base_Class bases_S2802C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7924C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S2802C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
Class_Descriptor cd_S2802C1 = {  "S2802C1", // class name
  bases_S2802C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,8), // object size
  {0,0},0, // typeinfo_var
  {0,0},0, // virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14275C1  {
  void *s14275c1f0;
  int s14275c1f1[12];
  void *s14275c1f2[2];
};
//SIG(1 S14275C1) C1{ Fp Fi[12] Fp[2]}



static void Test_S14275C1()
{
  {
    init_simple_test("S14275C1");
    S14275C1 lv;
    check2(sizeof(lv), ABISELECT(72,60), "sizeof(S14275C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14275C1)");
    check_field_offset(lv, s14275c1f0, 0, "S14275C1.s14275c1f0");
    check_field_offset(lv, s14275c1f1, ABISELECT(8,4), "S14275C1.s14275c1f1");
    check_field_offset(lv, s14275c1f2, ABISELECT(56,52), "S14275C1.s14275c1f2");
  }
}
static Arrange_To_Call_Me vS14275C1(Test_S14275C1, "S14275C1", ABISELECT(72,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13494C1  {
  int s13494c1f0[4];
  void *s13494c1f1;
  int s13494c1f2;
  void *s13494c1f3;
};
//SIG(1 S13494C1) C1{ Fi[4] Fp Fi Fp}



static void Test_S13494C1()
{
  {
    init_simple_test("S13494C1");
    S13494C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S13494C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13494C1)");
    check_field_offset(lv, s13494c1f0, 0, "S13494C1.s13494c1f0");
    check_field_offset(lv, s13494c1f1, 16, "S13494C1.s13494c1f1");
    check_field_offset(lv, s13494c1f2, ABISELECT(24,20), "S13494C1.s13494c1f2");
    check_field_offset(lv, s13494c1f3, ABISELECT(32,24), "S13494C1.s13494c1f3");
  }
}
static Arrange_To_Call_Me vS13494C1(Test_S13494C1, "S13494C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12330C1  {
  int s12330c1f0;
  char s12330c1f1[8];
  int s12330c1f2[3];
};
//SIG(1 S12330C1) C1{ Fi Fc[8] Fi[3]}



static void Test_S12330C1()
{
  {
    init_simple_test("S12330C1");
    S12330C1 lv;
    check2(sizeof(lv), 24, "sizeof(S12330C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12330C1)");
    check_field_offset(lv, s12330c1f0, 0, "S12330C1.s12330c1f0");
    check_field_offset(lv, s12330c1f1, 4, "S12330C1.s12330c1f1");
    check_field_offset(lv, s12330c1f2, 12, "S12330C1.s12330c1f2");
  }
}
static Arrange_To_Call_Me vS12330C1(Test_S12330C1, "S12330C1", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14677C1  {
  void *s14677c1f0[4];
  int s14677c1f1;
  void *s14677c1f2[3];
};
//SIG(1 S14677C1) C1{ Fp[4] Fi Fp[3]}



static void Test_S14677C1()
{
  {
    init_simple_test("S14677C1");
    S14677C1 lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S14677C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14677C1)");
    check_field_offset(lv, s14677c1f0, 0, "S14677C1.s14677c1f0");
    check_field_offset(lv, s14677c1f1, ABISELECT(32,16), "S14677C1.s14677c1f1");
    check_field_offset(lv, s14677c1f2, ABISELECT(40,20), "S14677C1.s14677c1f2");
  }
}
static Arrange_To_Call_Me vS14677C1(Test_S14677C1, "S14677C1", ABISELECT(64,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15140C1  {
  char s15140c1f0;
  short s15140c1f1;
  int s15140c1f2;
  char s15140c1f3;
  void  mf15140c1(); // _ZN8S15140C19mf15140c1Ev
};
//SIG(1 S15140C1) C1{ m Fc Fs Fi Fc}


void  S15140C1 ::mf15140c1(){}

static void Test_S15140C1()
{
  {
    init_simple_test("S15140C1");
    S15140C1 lv;
    check2(sizeof(lv), 12, "sizeof(S15140C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15140C1)");
    check_field_offset(lv, s15140c1f0, 0, "S15140C1.s15140c1f0");
    check_field_offset(lv, s15140c1f1, 2, "S15140C1.s15140c1f1");
    check_field_offset(lv, s15140c1f2, 4, "S15140C1.s15140c1f2");
    check_field_offset(lv, s15140c1f3, 8, "S15140C1.s15140c1f3");
  }
}
static Arrange_To_Call_Me vS15140C1(Test_S15140C1, "S15140C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16593C1  {
  int s16593c1f0;
  char s16593c1f1[3];
  int s16593c1f2;
  void  mf16593c1(); // _ZN8S16593C19mf16593c1Ev
};
//SIG(1 S16593C1) C1{ m Fi Fc[3] Fi}


void  S16593C1 ::mf16593c1(){}

static void Test_S16593C1()
{
  {
    init_simple_test("S16593C1");
    S16593C1 lv;
    check2(sizeof(lv), 12, "sizeof(S16593C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16593C1)");
    check_field_offset(lv, s16593c1f0, 0, "S16593C1.s16593c1f0");
    check_field_offset(lv, s16593c1f1, 4, "S16593C1.s16593c1f1");
    check_field_offset(lv, s16593c1f2, 8, "S16593C1.s16593c1f2");
  }
}
static Arrange_To_Call_Me vS16593C1(Test_S16593C1, "S16593C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17680C1  {
  void *s17680c1f0;
  ::S14975C10 s17680c1f1;
  short s17680c1f2;
  void  mf17680c1(); // _ZN8S17680C19mf17680c1Ev
};
//SIG(1 S17680C1) C1{ m Fp FC2{} Fs}


void  S17680C1 ::mf17680c1(){}

static void Test_S17680C1()
{
  {
    init_simple_test("S17680C1");
    S17680C1 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S17680C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17680C1)");
    check_field_offset(lv, s17680c1f0, 0, "S17680C1.s17680c1f0");
    check_field_offset(lv, s17680c1f1, ABISELECT(8,4), "S17680C1.s17680c1f1");
    check_field_offset(lv, s17680c1f2, ABISELECT(10,6), "S17680C1.s17680c1f2");
  }
}
static Arrange_To_Call_Me vS17680C1(Test_S17680C1, "S17680C1", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13438C1  {
  int s13438c1f0[4];
  char s13438c1f1[28];
};
//SIG(1 S13438C1) C1{ Fi[4] Fc[28]}



static void Test_S13438C1()
{
  {
    init_simple_test("S13438C1");
    S13438C1 lv;
    check2(sizeof(lv), 44, "sizeof(S13438C1)");
    check2(__alignof__(lv), 4, "__alignof__(S13438C1)");
    check_field_offset(lv, s13438c1f0, 0, "S13438C1.s13438c1f0");
    check_field_offset(lv, s13438c1f1, 16, "S13438C1.s13438c1f1");
  }
}
static Arrange_To_Call_Me vS13438C1(Test_S13438C1, "S13438C1", 44);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21874C1  {
  short s21874c1f0[10];
  void  mf21874c1(); // _ZN8S21874C19mf21874c1Ev
  virtual  ~S21874C1(); // _ZN8S21874C1D1Ev
  S21874C1(); // tgen
};
//SIG(1 S21874C1) C1{ vd m Fs[10]}


void  S21874C1 ::mf21874c1(){}
 S21874C1 ::~S21874C1(){ note_dtor("S21874C1", this);}
S21874C1 ::S21874C1(){ note_ctor("S21874C1", this);} // tgen

static void Test_S21874C1()
{
  extern Class_Descriptor cd_S21874C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S21874C1, buf);
    S21874C1 *dp, &lv = *(dp=new (buf) S21874C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S21874C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21874C1)");
    check_field_offset(lv, s21874c1f0, ABISELECT(8,4), "S21874C1.s21874c1f0");
    test_class_info(&lv, &cd_S21874C1);
    dp->~S21874C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21874C1(Test_S21874C1, "S21874C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S21874C1C1Ev();
extern void _ZN8S21874C1D1Ev();
Name_Map name_map_S21874C1[] = {
  NSPAIR(_ZN8S21874C1C1Ev),
  NSPAIR(_ZN8S21874C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21874C1[];
extern void _ZN8S21874C1D1Ev();
extern void _ZN8S21874C1D0Ev();
static  VTBL_ENTRY vtc_S21874C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21874C1[0]),
  (VTBL_ENTRY)&_ZN8S21874C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21874C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21874C1[];
extern  VTBL_ENTRY _ZTV8S21874C1[];
Class_Descriptor cd_S21874C1 = {  "S21874C1", // class name
  0,0,//no base classes
  &(vtc_S21874C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S21874C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21874C1),4, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12986C1  {
  int s12986c1f0[2];
  char s12986c1f1;
  void *s12986c1f2;
};
//SIG(1 S12986C1) C1{ Fi[2] Fc Fp}



static void Test_S12986C1()
{
  {
    init_simple_test("S12986C1");
    S12986C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S12986C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12986C1)");
    check_field_offset(lv, s12986c1f0, 0, "S12986C1.s12986c1f0");
    check_field_offset(lv, s12986c1f1, 8, "S12986C1.s12986c1f1");
    check_field_offset(lv, s12986c1f2, ABISELECT(16,12), "S12986C1.s12986c1f2");
  }
}
static Arrange_To_Call_Me vS12986C1(Test_S12986C1, "S12986C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15007C1  {
  int s15007c1f0;
  int s15007c1f1;
  void  mf15007c1(); // _ZN8S15007C19mf15007c1Ev
};
//SIG(1 S15007C1) C1{ m Fi[2]}


void  S15007C1 ::mf15007c1(){}

static void Test_S15007C1()
{
  {
    init_simple_test("S15007C1");
    S15007C1 lv;
    check2(sizeof(lv), 8, "sizeof(S15007C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15007C1)");
    check_field_offset(lv, s15007c1f0, 0, "S15007C1.s15007c1f0");
    check_field_offset(lv, s15007c1f1, 4, "S15007C1.s15007c1f1");
  }
}
static Arrange_To_Call_Me vS15007C1(Test_S15007C1, "S15007C1", 8);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18122C1  {
  void *s18122c1f0[2];
  __tsi64 s18122c1f1;
  void  mf18122c1(); // _ZN8S18122C19mf18122c1Ev
};
//SIG(1 S18122C1) C1{ m Fp[2] FL}


void  S18122C1 ::mf18122c1(){}

static void Test_S18122C1()
{
  {
    init_simple_test("S18122C1");
    S18122C1 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S18122C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18122C1)");
    check_field_offset(lv, s18122c1f0, 0, "S18122C1.s18122c1f0");
    check_field_offset(lv, s18122c1f1, ABISELECT(16,8), "S18122C1.s18122c1f1");
  }
}
static Arrange_To_Call_Me vS18122C1(Test_S18122C1, "S18122C1", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14071C1  {
  void *s14071c1f0;
  char s14071c1f1[28];
};
//SIG(1 S14071C1) C1{ Fp Fc[28]}



static void Test_S14071C1()
{
  {
    init_simple_test("S14071C1");
    S14071C1 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S14071C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14071C1)");
    check_field_offset(lv, s14071c1f0, 0, "S14071C1.s14071c1f0");
    check_field_offset(lv, s14071c1f1, ABISELECT(8,4), "S14071C1.s14071c1f1");
  }
}
static Arrange_To_Call_Me vS14071C1(Test_S14071C1, "S14071C1", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18507C1  {
  int s18507c1f0;
  short s18507c1f1;
  virtual void  v1(); // _ZN8S18507C12v1Ev
  ~S18507C1(); // tgen
  S18507C1(); // tgen
};
//SIG(1 S18507C1) C1{ v1 Fi Fs}


void  S18507C1 ::v1(){vfunc_called(this, "_ZN8S18507C12v1Ev");}
S18507C1 ::~S18507C1(){ note_dtor("S18507C1", this);} // tgen
S18507C1 ::S18507C1(){ note_ctor("S18507C1", this);} // tgen

static void Test_S18507C1()
{
  extern Class_Descriptor cd_S18507C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S18507C1, buf);
    S18507C1 *dp, &lv = *(dp=new (buf) S18507C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S18507C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18507C1)");
    check_field_offset(lv, s18507c1f0, ABISELECT(8,4), "S18507C1.s18507c1f0");
    check_field_offset(lv, s18507c1f1, ABISELECT(12,8), "S18507C1.s18507c1f1");
    test_class_info(&lv, &cd_S18507C1);
    dp->~S18507C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18507C1(Test_S18507C1, "S18507C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S18507C1C1Ev();
extern void _ZN8S18507C1D1Ev();
Name_Map name_map_S18507C1[] = {
  NSPAIR(_ZN8S18507C1C1Ev),
  NSPAIR(_ZN8S18507C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18507C1[];
extern void _ZN8S18507C12v1Ev();
static  VTBL_ENTRY vtc_S18507C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18507C1[0]),
  (VTBL_ENTRY)&_ZN8S18507C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18507C1[];
extern  VTBL_ENTRY _ZTV8S18507C1[];
Class_Descriptor cd_S18507C1 = {  "S18507C1", // class name
  0,0,//no base classes
  &(vtc_S18507C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S18507C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18507C1),3, //virtual function table var
  2, // offset into main vftv pointed to by object[0]
  {0,0},0, // virtual table table var
  0, // n_initialized_bases
  0, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13889C1  {
  long s13889c1f0;
  short s13889c1f1[4];
};
//SIG(1 S13889C1) C1{ Fl Fs[4]}



static void Test_S13889C1()
{
  {
    init_simple_test("S13889C1");
    S13889C1 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S13889C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13889C1)");
    check_field_offset(lv, s13889c1f0, 0, "S13889C1.s13889c1f0");
    check_field_offset(lv, s13889c1f1, ABISELECT(8,4), "S13889C1.s13889c1f1");
  }
}
static Arrange_To_Call_Me vS13889C1(Test_S13889C1, "S13889C1", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15151C1  {
  unsigned char s15151c1f0:1;
  void  mf15151c1(); // _ZN8S15151C19mf15151c1Ev
};
//SIG(1 S15151C1) C1{ m Fc:1}


void  S15151C1 ::mf15151c1(){}

static void Test_S15151C1()
{
  {
    init_simple_test("S15151C1");
    static S15151C1 lv;
    check2(sizeof(lv), 1, "sizeof(S15151C1)");
    check2(__alignof__(lv), 1, "__alignof__(S15151C1)");
    set_bf_and_test(lv, s15151c1f0, 0, 0, 1, 1, "S15151C1");
  }
}
static Arrange_To_Call_Me vS15151C1(Test_S15151C1, "S15151C1", 1);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

